【发布时间】:2013-10-27 13:35:40
【问题描述】:
背景
我有自定义控件,包含一个Popup,其中包含一个ListBox
要求
当用户选择一个项目时,我需要关闭弹出窗口并对所选项目执行一些逻辑。用户在以下情况下选择项目:
- 他用鼠标点击项目。
- 他通过键盘导航(上/下键)选择和项目,然后点击进入
问题
我已经实现了上述所有内容,但我的问题是要监听的事件以执行我的逻辑。
如果我在 SelectionChanged 事件上执行我的逻辑,当用户单击所选项目时它不会触发,所以我错过了我的第一个场景。
如果我在PreviewMouseLeftButtonDown 上执行我的逻辑,它将在选择更改之前触发,所以我不知道用户选择了什么。这也是我不能同时使用两者的原因。
我想过监听 ListBoxItem 事件来执行此操作 (How to capture a mouse click on an Item in a ListBox in WPF?) 或以隐式 ListBoxItem 样式 (WPF Interaction triggers in a Style to invoke commands on View Model) 发出命令,但它们对我不起作用。
我想出的最佳想法是通过行为或动作创建某种“后选择”MouseButtonDown 事件,但我不确定如何,或者这是否是可行的方法。
任何想法如何创建这样的东西?还是有更好的解决方案?
【问题讨论】:
-
您发布的第一个链接适合您的需要。您能通过在 listboxItem 上设置事件来判断为什么不起作用吗?