Silverlight Listbox触发MouseRightButtonDown,但不触发MouseLeftButtonDown

时间:2010-05-11 09:20:00

标签: silverlight events silverlight-4.0 mouseclick-event

我在一个更大的项目中遇到这个问题......所以我设置了一个'Testpoject'作为概念证明:

  • 新Silverlight-Application
  • 添加列表框
  • 使用几个复选框填充列表框
  • 注册listBox1_MouseLeftButtonDown
  • 注册listBox1_MouseRightButtonDown

您将看到,listBox1_MouseLeftButtonDown在任何情况下都不会触发.... 然而,listBox1_MouseRightButtonDown就好了。

我尝试使用从ListBox派生的自定义类并重写,假设ListBox类中的某些内容设置了e.Handled = false,但这也没有改变行为。

关于为什么会发生这种情况以及如何解决的任何想法?

(这个问题也阻止'父母'控制接收点击事件......所以事件传递被破坏了)

:编辑: 我用一个解决方法修复了我的问题...所以不再需要答案了。如果有人想要弄清楚为什么会发生这种情况;)

2 个答案:

答案 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>