0

これは私の最初の質問なので、簡単にお願いします:)

私は WPF とデスクトップ ベースのアプリケーションを初めて使用し、イベント処理を勉強しています。バブリングとトンネリングを行ってみると、Button_Click でトンネリングを使用する方法を説明している例がどこにも見つかりません。

基本的に、ボタンをクリックすると、親コントロール (この場合はグリッド) が最初にイベントを処理し、Button_Click の実行を許可する前にいくつかのチェックを行う必要があります。私が抱えている問題は、Grid_PreviewMouseDown を使用してイベントをキャプチャできることですが、これはあいまいです! どのコントロールがハンドラーをトリガーしたかはわかりません(少なくとも私はそうは思いません)。

PreviewMouseDown がボタン クリックによってトリガーされたことを確認するにはどうすればよいですか? または: Button_Click をトンネリングする代替/より良い方法はありますか?

ありがとう

4

1 に答える 1

1

ハンドラーで、イベントを調べてSource、イベントを開始したコントロールを取得する必要があります。読み取り専用ではなくSource、別のコントロールを参照するように変更できることに注意してください。

PreviewMouseLeftButtonDownイベントに登録して、クリックだけでなく、左クリックを取得する方がおそらく幸運でしょう。

ハンドラーがマウスの左クリックのみを探すことを意図している場合は、次のコードを使用できます。

private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Button button = e.Source as Button;
    if (button != null)
    {
        // button is being clicked, handle it
    }
}
于 2011-08-11T10:29:12.580 に答える