5

私はButton

<Button>
    <Button.Template>
        <ControlTemplate>
            <StackPanel>
                <Image Source="share.png" 
                       MouseLeftButtonUp="Image_MouseLeftButtonUp"
                       MouseLeftButtonDown="Image_MouseLeftButtonDown" />
            </StackPanel>
        </ControlTemplate>
    </Button.Template>
</Button>

ただし、問題は、MouseLeftButtonDownとは異なり、イベントMouseLeftButtonUpが発生しないことです。なんで?どうすれば解決できますか?ありがとう。

4

3 に答える 3

9

おそらく、Buttonが既にイベントを処理しているため、Image コントロールまでフィルター処理されないためです。

で MoustUp および MouseDown イベントを処理するのはなぜImageですか? でそれらを処理しないのはなぜButtonですか?

編集
このイベントのドキュメントをざっと見てみると、MouseLeftButtonUpのルーティング戦略はDirectですが、実際の基になるイベントは、バブリング戦略を持つMouseUpイベントです。したがって、事実上、 には事実上のバブリング戦略が必要です。つまり、は の前にイベントを処理する機会を持つ必要があります。MouseLeftButtonUpImageButton

何か他のことが起こっているように聞こえます。Image コントロールで Image を何も設定せず、背景が null ( とは異なるColor.Transparent) の場合、WPF は、マウス イベントに関する限り、コントロールを「存在しない」ものとして扱います。

EDIT 2
うーん...多分私の最初の推測は結局正しかった。このスレッドによると:
http://social.msdn.microsoft.com/forums/en/wpf/thread/e231919d-9fef-4aa5-9dcb-2c1eb68df25b/#306db880-ed50-45d2-819f-88d76f7148c1がイベント
Buttonを処理しています。PreviewMouseUpMouseUpを使用して、どのボタンがクリックされたかを確認してみてください。

EDIT 3
わかりました...私はそれを理解したと思います。ボタンが MouseDown イベントでマウスを「キャプチャ」していることに賭けています。これが発生すると、他のコントロールは、マウスが離されるまで、MouseUp または MouseDown イベント (プレビュー バージョンを含む) を受け取りません。
参照: http://books.google.com/books?id=nYl7J7z3KssC&pg=PA146#v=twopage&q&f=true

于 2012-09-19T14:01:14.293 に答える
5

Cyborgx37 が言ったように、Click イベントは LeftMouseUp イベントを処理しています。

PreviewMouseLeftButtonUp以下に示すように、ボタンの代わりにイベントを使用MouseLeftButtonUpできます。

<Button PreviewMouseLeftButtonUp="Button_PreviewMouseLeftButtonUp">
    <Button.Template>
        <ControlTemplate>
            <StackPanel>
                <Image Source="..." />
            </StackPanel>
        </ControlTemplate>
    </Button.Template>
</Button>

ボタン テンプレートには画像しかありません。このボタンは必要ないと思います。上記のように使用できるため、MouseLeftUp イベントをキャプチャできます。

<Image MouseLeftButtonUp="Image_MouseLeftButtonUp" Source="..." />

この方法は非常に簡単ですが、必要なものによって異なります。

ところで、私のがらくた英語で申し訳ありませんが、お役に立てば幸いです。

于 2012-09-19T14:32:14.963 に答える
0

イベント PreviewMouseLeftButtonUp を使用してみてください。

于 2012-09-19T14:38:59.383 に答える