![](/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.