我使用ListBox选择项的手动限制为5。
我尝试了不同的方法,包括在其他一些相关问题中应用了一些解决方案,但仍然无法实现。
我已经尝试过: this ,但我无法使用“...附加到SelectionChanged事件”。我是说该怎么做?
this :但它会清除所有选定的项目,不会留下任何选定的项目。
甚至将.SelectedIndex设置为-1或null,同样的事情发生了。它取消选择了所有选定的项目。
等...
我想做的只是在达到限制后取消选择(希望这是有道理的)最后选择的项目。
或者最糟糕的解决方案:我可以禁用我的ListBox但是仍然显示所选项目(意思是仍然突出显示)?
我在 SelectionChanged 中尝试最多,而在 Mouse_Down 事件
上尝试了一些答案 0 :(得分: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);
}
}
答案 1 :(得分: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
仍会选择所有内容)