阻止用户取消选择ListBox中的项目?

时间:2011-05-01 00:21:44

标签: c# wpf xaml

我有一个包含大量项目的ListBox。用户可以单击项目以编辑其内容。如何阻止用户取消选择所有项目?即,用户不应该没有选择任何东西。

5 个答案:

答案 0 :(得分:4)

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

        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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

这样可以防止用户取消选择...将这两个事件添加到您的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);
        }

答案 3 :(得分:0)

要在列表框/下拉列表中禁用一个或多个选项,您可以添加“已禁用”属性,如下所示。这样可以防止用户选择此选项,并获得灰色叠加。

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

答案 4 :(得分:0)

amccormack建议的一种解决方案:

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