9

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

4

3 回答 3

12

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

于 2008-10-31T14:03:46.793 回答
12

我认为最好的方法是在 TreeView 上设置一个样式,它将更改 TreeViewItems 的模板以拥有您想要的图像。

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

我从代码项目文章中复制了相关的代码片段,该文章对此进行了更详细的介绍,但我认为您只需要以下内容(此代码位于 TreeView.Resources 元素中)。

<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>
于 2008-10-31T11:48:16.503 回答
11

我以这种方式使用了James OsbornStackPanel 技术......

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>
于 2009-02-20T20:11:19.240 回答