Вопрос

Я создаю 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top