しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

WPF メモ (10)

バブル型イベントをキャンセルする方法。キャンセルというか、途中で打ち切るというか。

XAML

<Window MouseDoubleClick="Window_MouseDoubleClick">
    <Canvas>
        <Button Click="Button_Click">Click Me!</Button>
    </Canvas>
</Window>

C#

private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    // 何らかの処理
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    // 何らかの処理
}

ウィンドウをダブルクリックしたときには何らかの処理をしたいけれど、ボタン上でダブルクリックされたときには何もしたくない場合、このままだとボタン上でダブルクリックしても Window の MouseDoubleClick が呼び出されてしまいます。

これを回避するにはボタンのプレビューイベントで止めてやります。

XAML

<Button Click="Button_Click" PreviewMouseDoubleClick="Button_MouseDoubleClick">Click Me!</Button>

C#

private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    // バブルイベントを止める
    e.Handled = true;
}

こうすることでウィンドウ上をダブルクリックしたときだけ MouseDoubleClick イベントが発生するのでめでたしめでたし。