Шаблон иерархических данных вызывает свойство выбранного элемента
Я создал статический ресурс приложения для моего TreeView
стиль. У меня есть пользовательский тип в качестве типа шаблона иерархических данных, давайте назовем его Foobar. HierarchicalDataTemplate
источник предметов привязан к коллекции Foobar FooCollection.
Пользовательская привязка объекта не является проблемой. Проблема в том, что я хочу изменить стиль выбранного TreeViewItem
используя триггеры. Триггер для собственности IsMouseOver
вызвать как надо. Но я не могу найти нигде, чтобы вызвать свойство IsSelected
в моем HierarchicalDataTemplate.Triggers
?
<Style TargetType="TreeView" x:Key="TreeView">
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="Background" Value="#00000000"/>
<Style.Resources>
<!--Foobar tree view items-->
<HierarchicalDataTemplate DataType="{x:Type f:Foobar}" ItemsSource="{Binding FooCollection}">
<TextBlock Name="tbbName" Text="{Binding Name}" Foreground="#7FFFFFFF" FontSize="16"/>
<HierarchicalDataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="tbbName" Property="Effect">
<Setter.Value>
<DropShadowEffect ShadowDepth="0" Color="#7FFFFFFF" Opacity="1" BlurRadius="20"/>
</Setter.Value>
</Setter>
<Setter TargetName="tbbName" Property="Foreground" Value="#AFFFFFFF"/>
</Trigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
</Style.Resources>
</Style>
1 ответ
Что вы можете сделать, это связать IsSelected
собственность от TreeViewItem
до соответствующей собственности в Foobar
class Foobar : INotifyPropertyChanged
{
...
private bool _isSelected;
public bool IsSelected
{
get => _isSelected;
set
{
if(_isSelected == value)
return;
_isSelected = value;
OnPropertyChanged();
}
}
...
}
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
...
</Style>
</TreeView.ItemContainerStyle>
...
</TreeView>
тогда вы можете использовать DataTrigger
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<DataTrigger.Setters>
...
</DataTrigger.Setters>
</DataTrigger>