wpf treeviewitem - PullRequest
       7

wpf treeviewitem

0 голосов
/ 18 января 2010

Я создаю TreeView, используя следующий метод, проходящий по документу xml.

Однако, когда выбран любой 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

1 Ответ

2 голосов
/ 18 января 2010

Это работает правильно. Событие PreviewMouseLeftButtonDown является перенаправленным событием (в этом случае стратегия туннелируется). Это означает, что корень визуального дерева получает событие первым, и он движется вниз, пока не достигнет элемента управления, который первоначально вызвал событие. События MouseLeftButtonDown и Selected также маршрутизируются, но его стратегия пузырится - это означает, что событие проходит вверх по визуальному дереву, начиная с элемента управления, который вызвал событие.

Если вы хотите, чтобы перенаправленное событие больше не отправлялось, установите для свойства Handled переданной RoutedEventArgs значение true.

...