WPF TreeView ItemTemplate未应用于TreeViewItem

时间:2013-01-29 09:24:44

标签: c# wpf xaml treeview itemtemplate

我有一个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>

2 个答案:

答案 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

的更多信息

http://blogs.msdn.com/b/mikehillberg/archive/2009/10/30/treeview-and-hierarchicaldatatemplate-step-by-step.aspx

编辑:

如果您想将My_Template应用于TreeView,请尝试使用此代码。

        trvRecordList.Items.Add("");
        trvRecordList.Items.Add("");

答案 1 :(得分:0)

ItemTemplate用于数据对象。查看ItemTemplate on MSDN的评论。

TreeViewItem是为每个数据项生成的容器,并通过ItemContainerTemplate设置样式。 ItemContainerTemplate on MSDN