Textblock 不会在 HierarchicalDataTemplate 中接收触发器
Textblock won't recieve trigger in HierachicalDataTemplate
我正在尝试让 TreeView 将项目显示为 TextBlock,然后根据数据绑定对象中的布尔值来设置 FontWeight 普通或粗体,大致如下:
<TreeView x:Name="TreeView" ItemsSource="{Binding Layers}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type viewModels:Layer}" ItemsSource="{Binding Path=Layers}">
<TextBlock Text="{Binding Path=Name}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ShowInPreview}">
<Setter Property="FontWeight" Value="Bold" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
触发器外的 Setter 实际上有效,当我将其设置为 "Bold" 时,一切立即变为粗体。只是 DataTrigger 永远不会触发 :P
ItemSource 实现 INotifyPropertyChanged,所有属性(包括 ShowInPreview)上的 Layer 对象也是如此。
我已经尝试了各种可以在网上找到的不同设置(使用 Window.Resources、将其放入 TreeView.ItemContainerStyle 等),所以我完全不知所措现在!
在数据触发器上设置值。
我不知道你的 属性 到底在哪里,试试这样的东西。我认为,绑定问题:
<DataTrigger Binding="{Binding Path=DataContext.ShowInPreview, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}">
我正在尝试让 TreeView 将项目显示为 TextBlock,然后根据数据绑定对象中的布尔值来设置 FontWeight 普通或粗体,大致如下:
<TreeView x:Name="TreeView" ItemsSource="{Binding Layers}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type viewModels:Layer}" ItemsSource="{Binding Path=Layers}">
<TextBlock Text="{Binding Path=Name}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ShowInPreview}">
<Setter Property="FontWeight" Value="Bold" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
触发器外的 Setter 实际上有效,当我将其设置为 "Bold" 时,一切立即变为粗体。只是 DataTrigger 永远不会触发 :P
ItemSource 实现 INotifyPropertyChanged,所有属性(包括 ShowInPreview)上的 Layer 对象也是如此。
我已经尝试了各种可以在网上找到的不同设置(使用 Window.Resources、将其放入 TreeView.ItemContainerStyle 等),所以我完全不知所措现在!
在数据触发器上设置值。
我不知道你的 属性 到底在哪里,试试这样的东西。我认为,绑定问题:
<DataTrigger Binding="{Binding Path=DataContext.ShowInPreview, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}">