ListBox:如果满足最大限制,如何取消选择/取消选择所选项目?

时间:2012-01-09 17:52:03

标签: c# wpf silverlight

我使用ListBox选择项的手动限制为5。

我尝试了不同的方法,包括在其他一些相关问题中应用了一些解决方案,但仍然无法实现。

我已经尝试过: this ,但我无法使用“...附加到SelectionChanged事件”。我是说该怎么做?

this :但它会清除所有选定的项目,不会留下任何选定的项目。

甚至将.SelectedIndex设置为-1或null,同样的事情发生了。它取消选择了所有选定的项目。

等...

我想做的只是在达到限制后取消选择(希望这是有道理的)最后选择的项目。

或者最糟糕的解决方案:我可以禁用我的ListBox但是仍然显示所选项目(意思是仍然突出显示)?

我在 SelectionChanged 中尝试最多,而在 Mouse_Down 事件

上尝试了一些

2 个答案:

答案 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仍会选择所有内容)