在用户控件级别上单击鼠标右键

时间:2015-02-07 14:00:45

标签: wpf wpf-controls

<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?

1 个答案:

答案 0 :(得分:0)

我认为如果处理它你就无法进一步了解冒泡事件。解决方法是将主机对象传递给用户控件。之后,您可以从主机对象中调用所需的任何方法。这很丑,但我认为它会起作用