Событие TreeViewItem MouseLeftButtonUp сработало из родительского вместо листового

ЦЕЛЬ: Я пытаюсь расширить элементы дерева, используя один клик. Мне нужно получить доступ к DataContext выбранного узла и установите свойство для расширения / свертывания.

То, что я пробовал, я положил EventSetter на TreeViewItem за MouseLeftButtonUp (MLBU) & PreviewMouseLeftButtonUp, Однако при щелчке на листовом узле в обработчике MLBU я получаю свойство Header отправителя как родительский, а не конечный. OriginalSource правильно указывает на контроль листа. Но если я воспользуюсь этим, мне придется определить все типы источников, а затем извлечь из них ценность.

Есть ли другой способ сделать это?

РЕДАКТИРОВАТЬ

XAML для настройки события:

<Style TargetType="TreeViewItem" BasedOn="{StaticResource SomeStyle}">
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}"/>
<EventSetter Event="PreviewMouseLeftButtonUp" Handler="OnPreviewMouseLeftButtonUp"/>
<EventSetter Event="MouseLeftButtonUp" Handler="OnMouseLeftButtonUp"/>
</Style>

Элементы древовидной структуры имеют разные таблицы данных в зависимости от требований. Так что в OriginalSource это может быть Image или же System.Windows.Documents.Run (подходит для Label). Таким образом, я должен поставить if-else для каждого типа элемента управления, который я создаю. Принимая во внимание, что мой DataContext имеет интерфейс верхнего уровня для каждого элемента, свойство которого я могу установить для его расширения. Так что общее преобразование будет работать.

0 ответов

Другие вопросы по тегам