2

これはSO質問3222456に関連しています...。

いくつかの画像とTextBlockを含む独自のUserControlを作成していますが、それ以外は何もありません。UserControl全体がクリックされたときにイベントを発生させたいのですが。私の問題(または誤解)は、WPFには、フックできるMouseUpイベントのみがあり、MouseClickはないように見えることです。

では、ベストプラクティスは何ですか?私が見つけることができるすべての例は、WPFのmouseUpがクリックイベントと同等であるかのように機能しますが、それは正しくありません。ユーザーが画面の一部でmouseDownを実行し、それが私のコントロールを超えるまでマウスを押したままにしてから、マウスを離した場合はどうなりますか。それはMouseUpイベントを発生させますが、それは私のコントロールのクリックではありません。

では、UserControlの真のMouseClickイベントを取得するにはどうすればよいですか?

4

2 に答える 2

3

非常に簡単な方法の1つは、コンテンツ全体をほとんど空のテンプレートを持つボタンに入れて、ButtonOnClickイベントに応答することです。

これは次のようになります

年:

<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 に答える