2

这与SO Question 3222456 ....

我正在创建自己的 UserControl,上面有一些图像和 TextBlock,仅此而已。我想在单击整个 UserControl 时触发一个事件。我的问题(或误解)是在 WPF 中似乎只有我可以挂钩的 MouseUp 事件,没有 MouseClick。

那么最佳实践是什么?我能找到的所有示例都好像 WPF 中的 mouseUp 等同于单击事件,但这是不对的。如果用户在屏幕的某个部分执行 mouseDown,按住鼠标直到它超出我的控制,然后松开鼠标会怎样。即使它触发了 MouseUp 事件,这也不是我的控件的单击。

那么如何为我的 UserControl 获得真正的 MouseClick 事件?

4

2 回答 2

3

一种非常简单的方法是将您的整个内容放入一个带有几乎空模板的按钮中并响应Button'sOnClick事件。

这看起来像

老的:

<UserControl ...>
  <Grid> ... </Grid>
</UserControl>

新的:

<UserControl ...>
   <Button OnClick="YourEventHandler">
      <Grid> ... </Grid>
      <Button.Template>
        <ControlTemplate x:Key="BlankButtonTemplate" TargetType="{x:Type ButtonBase}">
           <Border Background="#00000000">
             <ContentPresenter Margin="{TemplateBinding Padding}"
                               HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                               VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
           </Border>
        </ControlTemplate>
      </Button.Template>
   </Button>
</UserControl>
于 2012-10-23T06:53:47.727 回答
2

为什么不直接使用 MouseDown?

将事件放在用户控件中并简单地执行以下操作:

 private void MyControl_MouseDown(object sender, MouseButtonEventArgs e)
 {
     if (e.ChangedButton == MouseButton.Left)
     {
         MessageBox.Show("Clicked!");
     }
 }
于 2013-03-28T12:54:42.577 回答