2011-05-01 5 views
8

ListBox에 여러 항목이 있습니다. 사용자는 항목을 클릭하여 내용을 편집 할 수 있습니다. 사용자가 모든 항목의 선택을 취소하지 못하도록하려면 어떻게합니까? 즉, 사용자는 아무 것도 선택할 수 없어야합니다.사용자가 ListBox에서 항목의 선택을 취소하지 못하게 하시겠습니까?

+1

중복 가능성 [WPF리스트 박스 : 비 선택/선택 해제를 허용하지 않는다 (http://stackoverflow.com/questions/5815844/wpf-listbox-do-not-allow-unselect-deselect) –

답변

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' 이벤트 만 볼 수 있습니다. WPF와 .net 4를 사용하여 확실히 ListBox입니다 ... – mpen

+0

@Mark : 올바른 amccormack 게시물은 winforms (Windows.Forms 네임 스페이스) 용입니다. 그래도 대답의 요지는 여전히 적용됩니다. –

0

목록 상자/드롭 다운에서 하나 이상의 옵션을 비활성화하려면 아래에 표시된대로 "disabled"속성을 추가 할 수 있습니다. 이렇게하면 사용자가이 옵션을 선택할 수 없으며 회색 오버레이가 표시됩니다.

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

나는이 질문에 내가 원했던 것과 반대라고 생각한다. 사용자가 옵션을 선택 해제하지 않도록하려면 * 옵션을 선택하지 말아야합니다. 마지막 목록 항목이 1이 될 때 사용하지 못하게 할 수 없다면 ... 원하는 동작을 제공 할 것인지 확실하지 않습니다. – mpen

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

재산권 CheckOnClick "참"을 ... 선택 해제에서 사용자를 방지하여 checkedListBox1에 그 2 개 이벤트를 추가하고 설정해야합니다 디자인 모드. (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); 
     } 
관련 문제