取消选择具有扩展选择模式的WPF列表框

我有一个带扩展选择模式的简单列表框。 选择工作几乎完全正常,就像它在资源管理器中工作。 但取消选择并没有真正发挥作用。 我想要的是当我点击列表框中元素范围之外的东西时,我希望取消选择所有元素。 默认情况下,我似乎没有这样做,我做了一个涉及selectionchanged和mouseup的黑客攻击来破解它。 但必须有更好的方法。 有任何想法吗?

添加取消选择function并不是那么脏,而且你正处于正确的轨道上。 主要问题是,默认情况下,ListBox中的ListBoxItems将一直延伸,因此很难点击一个。

下面是一个示例ListBox,它修改了默认的ItemContainerStyle,以便项目只占据列表的左侧,并且项目之间也有一些间距。

    Item 1 Item 2 Item 3 Item 4  

要取消选择所选项,我们只需要在EventHandler中将SelectedItem设置为null。 当我们单击ListBoxItem时,它将处理MouseDown / Click等以设置SelectedItem或修改SelectedItems。 因此,以及RoutedEvents的性质,我们只需要在ListBox中处理MouseDown。 单击ListBox内的某个位置时,它不是项目的一部分。

 private void ListBox_MouseDown(object sender, MouseButtonEventArgs e) { (sender as ListBox).SelectedItem = null; } 

我用过myListBox。 SelectedItems.Clear() 。 大多数选定的项目集合是只读的,但不是列表框。