我有一个绑定到MVVM可观察集合的TreeView。 我的项目模板由图像和文本块组成,如下面的代码所示:
<HierarchicalDataTemplate x:Key="TreeViewItemTemplate" ItemsSource="{Binding Items, Mode=OneWay, NotifyOnSourceUpdated=True}">
<TreeViewItem>
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<Image
Margin="-20,0,5,0"
Source="{Binding Icon, Converter={StaticResource TreeViewIconConverter}, Mode=OneWay}"
Style="{DynamicResource SmallIcon}"/>
<Label Content="{Binding Label}"/>
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
</HierarchicalDataTemplate>
单击某个项目时会出现问题。如果鼠标光标位于StackPanel上,则不会进行选择。 我还附上了截图,以便更清楚。
当然会发生这种情况,因为StackPanel现在超过选区。
有解决方法吗?
答案 0 :(得分:1)
我自己找到了答案。 当您使用分层数据模板自定义TreeView时,您不应复制TreeViewItem.Header模板,因为在运行时WPF将为您创建一个。 因此,为了拥有自定义TreeViewItem,这段代码就够了:
<HierarchicalDataTemplate x:Key="TreeViewItemTemplate" ItemsSource="{Binding Items, Mode=OneWay, NotifyOnSourceUpdated=True}">
<StackPanel Orientation="Horizontal">
<Image
Margin="0,0,5,0"
Source="{Binding Icon, Converter={StaticResource TreeViewIconConverter}, Mode=OneWay}"
Style="{DynamicResource SmallIcon}"/>
<Label Content="{Binding Label}"/>
</StackPanel>
</HierarchicalDataTemplate>