2011-06-23 24 views
2

私は、プログラム的にキャンバスの内部に入れ子になったパスを持っています。私は基本的に、クリックバブリングの仕組みを理解しようとしています。キャンバスのイベントハンドラを設定して、クリックのポイントがキャンバスの内部に入れ子になっているパスにあるかどうかを確認するにはどうすればよいですか。これは、パスがネストされていない場合に機能する、私の基本的な偶数コードです。WPF:キャンバス内にネストされたパスの検出をクリック

バブリングのクリック検出を追加するにはどうすればよいですか?

void Path_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    var item = ((FrameworkElement)e.OriginalSource).DataContext as Path; 

    if (item != null) 
    { 
     MessageBox.Show(item.Name); 
    } 
} 

答えて

1

キャンバス内のすべての要素UIElement.MouseLeftButtonUpバブリングイベントをキャッチそのようにあなたがキャンバス

theNestingCanvas.AddHandler(UIElement.MouseLeftButtonUpEvent , new RoutedEventHandler(target)); 

private void handler(object asd, RoutedEventArgs e) 
{ 
    Path p = e.OriginalSource as Path; 
    if (p != null) 
    { 
     //do whatever 
    } 
    e.Handled = true; 
} 

上のイベントUIElement.MouseLeftButtonUpEvent(パスがあるからそれを継承するよう)にハンドラを追加まだ他の場所では扱われていません...

もちろん、イベントPath.MouseLeftButtonUpEventにハンドラを追加することもできますが、なぜ他のネストされた要素のMouseUpイベントも捕捉するのはなぜですか?

関連する問題