我在更改用于 TreeViewItem 的 DataTemplate 时遇到了一些问题。理想情况下,我希望每个项目都包含 a TextBlock
,然后在选择时应该包含 a TextBox
。
到目前为止,这是我所拥有的(我以这个问题为起点):
<Window>
<Window.Resources>
<HierarchicalDataTemplate x:Key="normal"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="selected"
ItemsSource="{Binding Path=Children}">
<TextBox Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle">
<Setter Property="ItemTemplate" Value="{StaticResource normal}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource selected}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resource>
<Grid>
<TreeView ItemSource="{Binding Body}" ItemContainerStyle="{StaticResource ContainerStyle}" />
</Grid>
</Window>
发生的情况是树中只有一个节点,节点的文本是对象的类型名称。听起来绑定到节点的类型不是模板所期望的,所以它使用默认ToString()
绑定而不是Text
我指定的属性。
我已经在代码隐藏文件中设置了 Window 的 DataContext。我知道我的数据绑定是正确的,因为如果我HierarchicalDataTemplate
为 TreeView 设置一个,数据就会正确显示。
我认为我的问题是我需要设置样式以外的属性ItemTemplate
-TreeViewItem
我使用的是正确的属性,还是应该设置其他属性?