0

TreeViewxmlドキュメントをループする次のメソッドを使用して作成しています。

ただし、いずれかTreeViewItemを選択すると、階層内のすべてのノードが、選択されただけでなく、イベントトリガーを取得しますTreeViewItem

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

つまり、孫だけが関連するイベントをトリガーするのに対し、イベントは1回だけ呼び出されるはずですが、選択したアイテムの階層のすべてのノードに対して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

4

1 に答える 1

2

これは正しく機能しています。PreviewMouseLeftButtonDownイベントはルーティング イベントです (この場合、戦略はトンネリングです) 。これは、ビジュアル ツリーのルートが最初にイベントを取得し、最初にイベントをトリガーしたコントロールに到達するまで下に移動することを意味します。MouseLeftButtonDownandイベントもルーティングされますが、その戦略はバブリングです。Selectedつまり、イベントは、イベントをトリガーしたコントロールから開始して、ビジュアル ツリーを上っていきます。

ルーティング イベントを送信し続けないようにするには、渡された のHandledプロパティをに設定します。RoutedEventArgstrue

于 2010-01-18T12:13:41.280 に答える