質問

私は、XML文書をループ以下の方法を使用してTreeViewを作成しています。

任意のTreeViewItemが選択されている場合、しかし、階層内のすべてのノードは、イベントのトリガーだけではなく、選択TreeViewItemを取得している。

たとえば、我々はノードの孫を選択しましょう。孫、子、親を含むすべてのノードが同じイベントをトリガしています。

言い換えれば、我々は、関連するイベントのに対してのみ孫トリガーを期待して、イベントが一度だけ呼び出される必要がありますが、それは、選択した項目の階層のすべてのノードのために3回呼び出されてしまう。

ここでのコードは次のとおりです。

TreeViewItem getTreeViewItemWithHeader(XmlNode node)
{
    TreeViewItem tvi = new TreeViewItem();
    tvi.Header = node.Name;//hdr;
    tvi.Tag = node.Attributes["Tag"].Value;
    tvi.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(tvi_PreviewMouseLeftButtonDown);
    tvi.Selected += new RoutedEventHandler(tvi_Selected);

    return tvi;

}

あなたが何か提案がある場合は私に知らせてください、ありがとう。

N

役に立ちましたか?

解決

これは正しく動作しています。 PreviewMouseLeftButtonDownイベントは、ルーティングイベント(この場合には戦略がトンネリングである)です。ビジュアルツリーのルートは、最初のイベントを取得し、それはもともとイベントをトリガ制御に達するまでそれがダウンしてそのように動作することをこれが意味。 MouseLeftButtonDownSelectedイベントもルーティングされますが、その戦略がバブリングされる - 。この手段は、イベントがイベントをトリガしたコントロールで始まる、ビジュアルツリーまでそのように動作することを

あなたがルーティングイベントをしたい場合は、

Handledに渡さRoutedEventArgstrueプロパティを設定し、送信することが続行できません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top