Событие 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 имеет интерфейс верхнего уровня для каждого элемента, свойство которого я могу установить для его расширения. Так что общее преобразование будет работать.