2011-05-01 68 views
8

我有一个列表框和一堆物品。用户可以点击一个项目来编辑其内容。如何防止用户取消选择所有项目?即用户不应该没有选择任何东西。防止用户取消选择ListBox中的项目?

+1

可能重复的[WPF列表框:不允许取消选择/取消选择(http://stackoverflow.com/questions/5815844/wpf-listbox-do-not-allow-unselect-deselect) – 2011-05-01 06:08:41

回答

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

2

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

+0

奇怪......我只看到一个'SelectionChanged'事件。它绝对是一个'ListBox'虽然...使用WPF和.net 4 ... – mpen 2011-05-01 00:42:13

+0

@Mark:正确,链接amccormack帖子是winforms(Windows.Forms命名空间)。但答案的要点仍然适用。 – 2011-05-01 01:19:12

0

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

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

我想这是我想问这个问题时想要的。我想阻止用户取消选择一个选项,而不是选择它。除非你的意思是我可以禁用最后一个列表项,当他们下降到1 ....我不知道这是否会给我所需的行为或不。 – mpen 2012-01-30 21:34:33

0

一种解决方案,通过amccormack建议:

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

本工程为确保从取消阻止用户......那些2个活动添加到您的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); 
     } 
相关问题