wpf treeviewitem элемент дерева
-
21-09-2019 - |
Вопрос
Я создаю TreeView
используя следующий метод циклического просмотра xml-документа.
Однако, когда какой-либо TreeViewItem
выбраны все узлы в иерархии получают триггеры событий, а не только выбранные TreeViewItem
.
Например, предположим, что мы выбираем внука узла.Все узлы, включая grandchild, дочерний, родительский, запускают одно и то же событие.
Другими словами, мы ожидали бы, что только внук запустит связанное событие, тогда как и событие должно быть вызвано только один раз, но в конечном итоге оно вызывается 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
событие - это маршрутизируемое событие (в данном случае стратегией является туннелирование).Это означает, что корень визуального дерева получает событие первым, и оно продвигается вниз, пока не достигнет элемента управления, который первоначально вызвал событие.В MouseLeftButtonDown
и Selected
events также маршрутизируется, но его стратегия бурлит - это означает, что событие продвигается вверх по визуальному дереву, начиная с элемента управления, который запустил событие.
Если вы хотите, чтобы перенаправленное событие больше не отправлялось, установите Handled
свойство RoutedEventArgs
переданный в true
.