![](/img/trans.png)
[英]Hierarchical Data Template of an object with a property as List<AnotherObject>
[英]Hierarchical data template trigger selected item property
我已经为TreeView
样式创建了一个静态应用程序资源。 我有一个自定义类型作为分层数据模板类型,我们称之为Foobar。 HierarchicalDataTemplate
项源绑定到Foobar的FooCollection。
自定义对象绑定不是问题。 问题是我想使用触发器更改所选TreeViewItem
样式。 属性IsMouseOver
触发器应该触发。 但是我在HierarchicalDataTemplate.Triggers
找不到任何地方触发属性IsSelected
吗?
<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>
您可以做的是将TreeViewItem
的IsSelected
-property绑定到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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.