2011-05-01 69 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); 
     } 
相關問題