我已经为我的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>
答案 0 :(得分:0)
您可以做的是将IsSelected
的{{1}}属性绑定到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