繁体   English   中英

WPF TreeView ItemTemplate不适用于TreeViewItem

[英]WPF TreeView ItemTemplate not applied to TreeViewItem

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

由于要添加的列表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应用于TreeViewItem本身的ItemTemplate属性。 以下是我对您的代码所做的修改

        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("");

ItemTemplate用于数据对象。 检查MSDN上ItemTemplate的备注。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM