我有一个只有 1 级项目的 WPF TreeView。TreeView 是绑定到字符串 ObservableCollection 的数据。如何确保相同的图标出现在 TreeView 中每个节点的左侧?
vg1890
问问题
30475 次
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 Osborn的StackPanel 技术......
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 回答