如何在WPF TreeView中的节点旁边添加图标?

时间:2008-10-30 15:28:14

标签: .net wpf treeview

我有一个只有1级项目的WPF TreeView。 TreeView是绑定到ObservableCollection字符串的数据。如何确保TreeView中每个节点左侧显示相同的图标?

3 个答案:

答案 0 :(得分:12)

我认为最好的方法是在TreeView上设置一个Style,它将改变TreeViewItems的模板以获得你想要的Image。

模板可能需要是带有图像和标签控件的StackPanel,将图像绑定到图标,将标签文本绑定到Observable集合中的字符串。

我已经复制了Code Project article中的相关代码段,其中详细介绍了这一点,但我认为以下是您所需要的全部内容(此代码位于TreeView.Resources元素中)。< / p>

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Name="img"
                           Width="20"
                           Height="20"
                           Stretch="Fill"
                           Source="image.png"/>
                    <TextBlock Text="{Binding}" Margin="5,0" />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

答案 1 :(得分:12)

我认为有助于您理解TreeView的最佳文章之一是http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx。总的来说,这描述了一组很好的模式,可以使WPF / SL中的很多场景变得更加容易。

答案 2 :(得分:11)

我以这种方式使用James OsbornStackPanel technique ......

XAML:

<TreeView Name="TreeViewThings" ItemsSource="{Binding}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Thing}"
                                  ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal" Margin="2">
                <Image Source="Thing.png"
                       Width="16"
                       Height="16"
                       SnapsToDevicePixels="True"/>
                <TextBlock Text="{Binding Path=Name}" Margin="5,0"/>
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>