<UserControl>
<Grid>
<!-- multiple controls here -->
</Grid>
</UserControl>
如上例所示,UserControl上托管了多个MS /第三方控件。我需要在UserControl(或其任何子控件)上单击鼠标右键。单击UserControl中的某些第三方控件时,似乎不会触发PreviewMouseRightButtonUp事件。根据文档,PreviewMouseRightButtonUp不是隧道事件,而是直接事件,因此某些3d派对控件可能不会通知订阅者此事件。
我还尝试为此事件添加处理程序,但仍然没有结果
AddHandler(UserControl.PreviewMouseRightButtonDownEvent, new RoutedEventHandler(GetHandledToo), true);
AddHandler(UserControl.PreviewMouseRightButtonUpEvent, new RoutedEventHandler(GetHandledToo), true);
AddHandler(UserControl.MouseRightButtonDownEvent, new RoutedEventHandler(GetHandledToo), true);
AddHandler(UserControl.MouseRightButtonUpEvent, new RoutedEventHandler(GetHandledToo), true);
那么,有没有办法在用户控制级别上始终捕获鼠标右键事件,无论它是否被标记为已处理?
编辑:我找到了问题所在。问题在于尚未评估其内容的ContentControl。例如:
<ContentControl x:Name="chart" Content="{Binding DiagramScreen}" />
ContentControl通过DataTemplate重构其结构。如果DiagramScreen为NULL,则尚未创建ContentControl的内容。这意味着此ContentControl在UserControl中占用的空间不响应鼠标事件。如何使ContentControl响应鼠标事件,即使其内容为NULL?
答案 0 :(得分:0)
我认为如果处理它你就无法进一步了解冒泡事件。解决方法是将主机对象传递给用户控件。之后,您可以从主机对象中调用所需的任何方法。这很丑,但我认为它会起作用