2012-01-09 83 views
0

我使用列表框選擇項目的手動限制爲5列表框:如何在取消最大限制後取消選擇/取消選擇項目?

我嘗試不同的方法,包括在其他一些相關問題,進行一些解決方案,但仍無法做到這一點。

我已經嘗試過:this但我不能跟着使用「...附加到SelectionChanged事件」。我的意思是如何做到這一點?

this:但它會清除所有選定的項目而不會留下任何選定的項目。

甚至將.SelectedIndex設置爲-1或null併發生相同的事情。它取消選擇每個選定的項目。

等等

所有我想要做的就是,一旦限制開會取消(希望這是有意義的)最後一次選擇的項目。

或者最糟糕的解決方案:我可以禁用我的列表框但仍顯示選定的項目(意思還是突出顯示)?

我試過最如果在的SelectionChanged和一些MOUSE_DOWN事件

回答

2

如果您按照您鏈接到答案,那麼你到達這樣的事情:

XAML

<ListBox x:Name="myListBox" SelectionChanged="myListBox_SelectionChanged" SelectionMode="Multiple"> 
... 
</ListBox> 

代碼背後

void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // remove items from the end until at most 5 items are in the list 
    while (myListBox.SelectedItems.Count > 5) 
    { 
     myListBox.SelectedItems.RemoveAt(SelectedItems.Count - 1); 
    } 
} 
+0

它的工作!謝謝! 「如果」條件好而不是「時」。我的列表框被綁定到一個集合。 – Raf 2012-01-09 18:41:29

1

在WPF達到最大時,你可以禁用所有非選擇項目:

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
     <Style.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Binding="{Binding SelectedItems.Count, RelativeSource={RelativeSource AncestorType=ListBox}}" Value="5"/> 
        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/> 
       </MultiDataTrigger.Conditions> 
       <Setter Property="IsEnabled" Value="False"/> 
      </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListBox.ItemContainerStyle> 

(您可能希望以覆蓋輸入綁定雖然因爲Ctrl+A仍將選擇所有內容)

+0

再次感謝你。真的幫助我以其他方式,但在我的情況下,我現在想在代碼背後做它,因爲也許以後我會添加一些關於如何動態設置限制的邏輯。我真的很喜歡你的方法(而不是專注於選定的項目數量,你專注於其餘未選定的項目),但我想再次執行一些有用的事件和代碼 – Raf 2012-01-09 18:09:47