我有一个TreeView
并手动添加两个项目(TreeViewItem
)。
我想将ItemTemplate
应用于这两个项目,但似乎ItemTemplate
不适用于它们。实际上我在树中有更深层次(因此item1和item2每个都有一个集合ItemsSource
,并且它们有更多HierarchicalDataTemplates
。但为了演示第一个模板未应用于第一级项目,我简化了示例。以下是后面的代码。
TreeViewItem item1 = new TreeViewItem();
TreeViewItem item2 = new TreeViewItem();
trvRecordList.Items.Add(item1);
trvRecordList.Items.Add(item2);
这是我的xaml代码。 HierarchicalDataTemplate
写在正确的位置。
<HierarchicalDataTemplate x:Key="My_Template">
<StackPanel Orientation="Horizontal">
<Image Source="Images/Star_Blue.png"
Margin="0,0,4,0" Height="16" Width="16"/>
<TextBox Text="abcd"/>
</StackPanel>
</HierarchicalDataTemplate>
<TreeView Name="trvRecordList" Margin="2"
ItemTemplate="{StaticResource My_Template}">
</TreeView>
答案 0 :(得分:1)
由于您要向TreeViewItem
添加TreeView
个对象列表,因此My_Template将不会应用于它。如果检查输出窗口,则会出现如下所示的错误
System.Windows.Data Error: 26 : ItemTemplate and ItemTemplateSelector are ignored for items already of the ItemsControl's container type; Type='TreeViewItem'
解决方案是将My_Template应用于ItemTemplate
本身的TreeViewItem
属性。
以下是我对您的代码所做的修改
TreeViewItem item1 = new TreeViewItem();
TreeViewItem item2 = new TreeViewItem();
item1.Items.Add("");
item1.Items.Add("");
item1.ItemTemplate = FindResource("My_Template") as HierarchicalDataTemplate;
item2.Items.Add("");
item2.Items.Add("");
item2.ItemTemplate = FindResource("My_Template") as HierarchicalDataTemplate;
trvRecordList.Items.Add(item1);
trvRecordList.Items.Add(item2);
通过以下链接了解有关HierarchicalDataTemplate
的更多信息编辑:
如果您想将My_Template应用于TreeView
,请尝试使用此代码。
trvRecordList.Items.Add("");
trvRecordList.Items.Add("");
答案 1 :(得分:0)
ItemTemplate
用于数据对象。查看ItemTemplate on MSDN的评论。
TreeViewItem
是为每个数据项生成的容器,并通过ItemContainerTemplate
设置样式。 ItemContainerTemplate on MSDN