XAML 禁止用户取消选择列表框中的项?

8fq7wneg  于 2023-09-28  发布在  其他
关注(0)|答案(6)|浏览(116)

我有一个列表框,里面有一堆项目。用户可以单击项目以编辑其内容。如何防止用户取消选择所有项目?即,用户不应该选择任何内容。

nfg76nw0

nfg76nw01#

在您的情况下缺少一个案例,即当列表被清除时,您将重新选择列表中不再存在的项目。我通过添加额外的检查来解决这个问题。

var listbox = ((ListBox)sender);
        if (listbox.SelectedItem == null)
        {
            if (e.RemovedItems.Count > 0)
            {
                object itemToReselect = e.RemovedItems[0];
                if (listbox.Items.Contains(itemToReselect))
                {
                    listbox.SelectedItem = itemToReselect;
                }
            }
        }

然后我把这个inside a behaviour

inkz8wg9

inkz8wg92#

我不确定是否有一种直接的方法来禁用取消选择一个项目,但一种对用户透明的方法是跟踪最后选择的项目,每当SelectionChanged事件被引发并且选择的索引为-1时,然后重新选择最后一个值。

5n0oy7gb

5n0oy7gb3#

这肯定能防止用户取消选择…将这两个事件添加到checkedListBox1中,并在设计模式下将CheckOnClick属性设置为“True”。(MSVS2015)

private void checkedListBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            checkedListBox1.SetItemChecked(checkedListBox1.SelectedIndex, true);
        }

        private void checkedListBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            checkedListBox1.SetItemChecked(checkedListBox1.SelectedIndex, true);
        }
tkqqtvp1

tkqqtvp14#

要禁用列表框/下拉列表中的一个或多个选项,您可以添加“disabled”属性,如下所示。这将阻止用户选择此选项,并且它将获得灰色覆盖。

ListItem item = new ListItem(yourvalue, yourkey);
item.Attributes.Add("disabled","disabled");
lb1.Items.Add(item);
os8fio9y

os8fio9y5#

一个解决方案,如amccormack所建议的:

private void hostsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(lstHosts.SelectedItem == null)
        {
            if(e.RemovedItems.Count > 0)
            {
                lstHosts.SelectedItem = e.RemovedItems[0];
            }
o2g1uqev

o2g1uqev6#

如果您的ListView支持Multiple选择,这对我来说是有效的。

var found = e.RemovedItems.Cast<User>()
                          .Where(user => user.Id == Id);
if (found.Any())
{
    User user = found.First();
    user.Selected = true;
    (e.Source as ListView).SelectedItems.Add(user);
}

无论Single还是MultipleSelectionMode,此解决方案都应该有效。如果您希望多个项目保持选中状态,请通过将对象添加回SelectedItems属性来相应地调整代码。

相关问题