我的TreeView
有以下风格:
<Style TargetType="TreeViewItem">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<Image Width="16" Height="16"/>
<Label Content="{TemplateBinding Content}"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
TreeView
定义为:
<TreeView>
<TreeViewItem Header="Pages">
<TreeViewItem Header="Google"/>
<TreeViewItem Header="Stackoverflow"/>
</TreeViewItem>
<TreeViewItem Header="Stuff">
<TreeViewItem Header="MyDomain"/>
<TreeViewItem Header="Other Domains">
<TreeViewItem Header="Domain 1"/>
<TreeViewItem Header="Domain 2"/>
<TreeViewItem Header="Domain 3"/>
</TreeViewItem>
</TreeViewItem>
</TreeView>
现在我想在HeaderTemplate
中设置图像。如果TreeViewItem
有子节点,我想要的图像与没有子节点的图像不同。
图像位于静态类ImageSources
中。如果我输入:
<Image Width="16" Height="16" Source="{x:Static helper:ImageHelper.TreeFolder}"/>
它运作正常。但是所有TreeViewItems
都拥有相同的图像。
所以我考虑编写转换器并将其用作源:
<Image Width="16" Height="16" Source="{Binding Converter={StaticResource treeImageConverter}"/>
我现在的问题是:如何在我的转换器中检测当前TreeViewItem
是否有孩子?我试图将它作为ConverterParameter传递但我不知道如何在DataTemplate中正确设置它。
答案 0 :(得分:2)
一种方法是使用Style
分配Image
到DataTrigger
控件来检查TreeViewItem.HasItems
属性:
<Style TargetType="{x:Type Image}" x:Key="ImageForTreeViewItem">
<Setter Property="Source" Value="{x:Static helper:ImageHelper.Image1}" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasItems, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}" Value="True" >
<Setter Property="Source" Value="{x:Static helper:ImageHelper.Image2}" />
</DataTrigger>
</Style.Triggers>
</Style>