1

我有一个TreeView并手动添加两个项目(TreeViewItem)。我想应用于ItemTemplate这两个项目,但似乎ItemTemplate不适用于它们。实际上我在树中有更深的层次(所以 item1 和 item2 每个都有一个集合 as 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>
4

2 回答 2

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("");
于 2013-01-29T11:15:10.377 回答
0

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

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

于 2013-01-29T09:39:57.183 回答