1

我有一个绑定到 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 现在位于选择区域上方。

有什么解决方法吗?

4

1 回答 1

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>
于 2013-01-22T15:05:55.687 回答