我在一个更大的项目中遇到这个问题......所以我设置了一个'Testpoject'作为概念证明:
您将看到,listBox1_MouseLeftButtonDown在任何情况下都不会触发.... 然而,listBox1_MouseRightButtonDown就好了。
我尝试使用从ListBox派生的自定义类并重写,假设ListBox类中的某些内容设置了e.Handled = false,但这也没有改变行为。
关于为什么会发生这种情况以及如何解决的任何想法?
(这个问题也阻止'父母'控制接收点击事件......所以事件传递被破坏了)
:编辑: 我用一个解决方法修复了我的问题...所以不再需要答案了。如果有人想要弄清楚为什么会发生这种情况;)
答案 0 :(得分:5)
This似乎回答了你的问题。引用:
这是因为ListBoxItem在内部处理此事件以及MouseLeftButtonDown事件(停止冒泡)以实现项目选择。
解决方案是在代码隐藏文件中添加事件处理程序。来自文章:
虽然在路由事件处理程序中将RoutedEventArgs参数的Handled属性设置为true似乎会停止隧道或冒泡,但是进一步向上或向下树的各个处理程序可以选择接收事件!这只能通过过程代码来完成,使用AddHandler的重载来添加布尔的handlingEventsToo参数。
尽管看到最后的警告。
答案 1 :(得分:1)
这是设计的。如果检查框架代码,您将看到ListBoxItem将Handled属性设置为true。
我有同样的问题,所以在我的ListBoxItem.ItemTemplate中,我在我的内容中添加了事件处理程序。
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
... other controls ...
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>