Textblock不会在HierachicalDataTemplate中接收触发器

时间:2015-11-05 01:38:28

标签: c# wpf xaml treeview

我正在尝试使用TreeView将项目显示为TextBlock,然后基于数据绑定对象内部的布尔值来生成FontWeight Normal或Bold,几乎是以下内容:

<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等等),所以我现在完全不知所措!

2 个答案:

答案 0 :(得分:0)

在数据触发器上设置值。

答案 1 :(得分:0)

我不确切知道你的房产在哪里,尝试这样的事情。我认为,绑定问题:

<DataTrigger Binding="{Binding Path=DataContext.ShowInPreview, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}">