【问题标题】:C# ListBox Selection Unchanged Event?C# ListBox 选择未更改事件?
【发布时间】:2017-07-05 14:11:45
【问题描述】:

如果用户再次单击同一项目,我希望能够取消选择 ListBox 中的项目。有SelectionChanged 事件大家都用ListBoxes,但是这显然不会在选择不变的情况下触发。

也没有人们推荐的Click 事件。 Visual Studio C# 2015 不包含此类事件。

我曾尝试使用MouseLeftButtonDown 事件,但一旦ListBoxListBoxItems 填充,此事件就不再触发。此外,我曾考虑将鼠标事件附加到ListBoxItems,但这似乎不切实际,因为我每次填充ListBox 时都必须附加n 数量的新事件。

有人对此查询有 XAML 解决方案吗?

【问题讨论】:

  • 设置SelectionMode="Multiple"可以选择多个项目,也可以通过单击鼠标来选择和取消选择项目。
  • @Clemens 用户应该不能选择多个项目,但我很欣赏这个答案。 mm8 的回答如我所愿。
  • 以防万一您还不知道,Ctrl+Click 在单选模式(以及扩展模式)中取消选择所选项目。这可能也是您的应用程序的用户所期望的。

标签: c# wpf xaml visual-studio-2015 listbox


【解决方案1】:

您可以按照我在此处的建议处理 ListBox 容器的 PreviewMouseLeftButtonDown 事件。

How to disable deselection of items in ListView?

【讨论】:

  • 看起来SelectedIndex 在调用此事件函数后更新了。无论如何从这个函数中获取当前选定的项目索引?
【解决方案2】:

我最初选择了 mm8 的答案,但后来我得知SelectedIndexPreviewMouseLeftButtonDown 事件期间没有更新,这是我在问题中间接要求的功能。使用此事件时,您实际上会得到以前的、过时的 SelectedIndex 值。

我发现如果您使用MouseLeftButtonUp 事件,它实际上会触发,这与MouseLeftButtonDown 事件不同,并且我获得了SelectedIndex 变量的最新值。

对于任何关心的人,这是System.Windows.ControlsListBox 版本。我尝试使用Systems.Windows.FormsListBox 实现,但它不支持开箱即用的多行,不像Controls,所以我放弃了这个想法。

tldr

使用MouseLeftButtonUp 事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2015-11-27
    • 1970-01-01
    • 2014-02-12
    • 2020-11-25
    相关资源
    最近更新 更多