当前位置: 首页 > 知识库问答 >
问题:

WPF树视图选择整个层次结构

司寇高峯
2023-03-14

我有一个绑定到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>

当然,发生这种情况是因为堆栈面板现在位于选择区域上方。

有什么解决办法吗?

共有1个答案

周昊乾
2023-03-14

我自己找到了答案。当您使用分层数据模板自定义TreeView时,您不应该复制TreeViewItem。头模板,因为在运行时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>
 类似资料:
  • 我在我的应用程序中使用MVVM模式。我有以下(简化版)VM类: 因此,一个Module2601_VM包含几个属性,以及Module2610_VM和ComPort_VM对象的列表。 我有一个MainModule_VM类中Module2601_VM对象的列表。 我想将这个Module2601集合及其子项绑定到树状视图中,并使用以下层次结构: 网关: 网关#0 COM#1 我的问题是,我的层次结构正常,

  • 我工作在一个WPF应用程序,我有2树视图。两者都有一个ViewModel对象集合作为其ItemsSource。我试图使它,当用户选择一个TreeView中的项目时,其他的选择被更改为空。 但是,我注意到TreeView中的实际项目属于SomethingViewModel类型,而不是TreeView项目。这意味着他们没有选择的财产。我已经尝试将IsSelected属性添加到ViewModel对象,并

  • 我想为我的树视图创建一个上下文菜单。TreeView XAML: 而helper:ExtendedTreeView是此类: 我使用它绑定SelectedItem并在我的ViewModel中使用它。 我的树视图有“标题”,它们是类型T_Frage它们的节点是类型T_Wertung,所以它是 T_Frage T_Wertung T_Wertung T_Wertung 我想为标题创建一个上下文菜单。因此

  • 如果我有这样一门课: 获取节点的所有父层次结构的最简单/最优雅的方法是什么? 类似于:

  • cesium每更新一个版本,就会导致默认的三维球不可见,原因是bingkey发生了变化,如果我们想设置三维球加载的初始图层,可以修改viewer的imageryProvider属性,但是这样做会导致一个问题:baseLayerPicker控件的按钮图标会显示为空白 今天我们来解决这个问题。 拿到问题不要直接开怼,想一想,应该怎么做? 首先我们知道这个控件就是一个div,那毫无疑问,使用js强制修改

  • 问题内容: 像这样对表格进行排序的最佳方法是什么: 要通过分级排序,它 的ID 或 名字 : “比萨饼” //节点1 “piperoni” //节点1.1 “奶酪” //节点1.2 “额外的奶酪” //节点1.2.1 “vegetariana” //节点1.3 “汉堡” //节点2 ‘咖啡’//节点3 编辑: 名称 末尾的数字是为了更好地可视化strucutre,而不是用于排序。 编辑2: 正如多