C# 是否阻止用户取消选择列表框中的项目?

C# 是否阻止用户取消选择列表框中的项目?,c#,wpf,xaml,C#,Wpf,Xaml,我有一个列表框,里面有很多项目。用户可以单击项目以编辑其内容。如何防止用户取消选择所有项目?i、 例如,用户不能选择任何内容。我不确定是否有直接的方法来禁用取消选择项目,但对用户透明的一种方法是跟踪最后一个选择的项目,并且每当引发事件且选择的索引为-1时,然后重新选择最后一个值。要禁用列表框/下拉列表中的打开或多个选项,可以添加“已禁用”属性,如下所示。这将阻止用户选择此选项,并将获得灰色覆盖 ListItem item = new ListItem(yourvalue, yourkey); i

我有一个列表框,里面有很多项目。用户可以单击项目以编辑其内容。如何防止用户取消选择所有项目?i、 例如,用户不能选择任何内容。

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

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

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

您的情况中缺少一个案例,即清除列表后,您将重新选择列表中不再存在的项目。我通过增加一张额外的支票来解决这个问题

        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;
                }
            }
        }

然后我把它放在这里。

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

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

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


奇怪的我只看到
SelectionChanged
事件。它肯定是一个
列表框
。。。使用WPF和.net 4…@Mark:Correct,链接amccormack文章是针对winforms(Windows.Forms命名空间)的。答案的要点仍然适用。可能的重复我想这与我问这个问题时想要的正好相反。我想阻止用户取消选择选项,而不是选择它。除非你的意思是我可以在最后一个列表项降到1时禁用它们…我不确定这是否会给我所需的行为。如何将此行为附加到XAML中的列表框?
        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);
        }