我有一个分层集合,用于表示目录结构,其中任何目录都可以包含目录和书签,任何书签都不能包含任何内容。这两个类都扩展了一个基本的抽象类。
当我尝试根据节点的类来处理与节点相关联的图像时,我遇到了问题。根据我用Google搜索的内容,我了解HierarchicalDataTemplate
是要走的路,但我似乎在实现中遗漏了一些东西。使用下面的代码,即使书签包含值,也不会显示树。
以下是我正在使用的XAML:
<TreeView
ItemsSource="{Binding Bookmarks}">
<TreeView.Resources>
<!-- Directories -->
<HierarchicalDataTemplate
DataType="{x:Type BaseBookmarks:BookmarkDirectory}"
ItemsSource="{Binding Path=Children}">
<TreeViewItem
Header="{Binding SimpleName}">
<Image
Source="/MapInterface;component/icons/16x16_BookmarkFolder.png" />
</TreeViewItem>
</HierarchicalDataTemplate>
<!-- Bookmarks -->
<HierarchicalDataTemplate
DataType="{x:Type BaseBookmarks:Bookmark}">
<TreeViewItem
Header="{Binding SimpleName}">
<Image
Source="/MapInterface;component/icons/16x16_Bookmark.png" />
</TreeViewItem>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
答案 0 :(得分:2)
您不必在DataTemplate中使用TreeViewItem。 TreeView将负责创建TreeViewItems并使用您的模板设置其content属性。 这应该有效:
<TreeView ItemsSource="{Binding Bookmarks}">
<TreeView.Resources>
<!-- Directories -->
<HierarchicalDataTemplate DataType="{x:Type BaseBookmarks:BookmarkDirectory}"
ItemsSource="{Binding Path=Children}">
<StackPanel Orientation="Horizontal">
<Image Source="/MapInterface;component/icons/16x16_BookmarkFolder.png"/>
<TextBlock Text="{Binding SimpleName}"/>
</StackPanel>
</HierarchicalDataTemplate>
<!-- Bookmarks -->
<HierarchicalDataTemplate DataType="{x:Type BaseBookmarks:Bookmark}">
<StackPanel Orientation="Horizontal">
<Image Source="/MapInterface;component/icons/16x16_Bookmark.png" />
<TextBlock Text="{Binding SimpleName}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>