整个HierarchyItem上的WPF TreeView选择

时间:2013-01-22 14:50:55

标签: wpf treeview

我有一个绑定到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上,则不会进行选择。 我还附上了截图,以便更清楚。 enter image description here

当然会发生这种情况,因为StackPanel现在超过选区。

有解决方法吗?

1 个答案:

答案 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>