WPF 树视图展开操作

Posted

技术标签:

【中文标题】WPF 树视图展开操作【英文标题】:WPF Treeview Expand Action 【发布时间】:2021-01-28 05:15:39 【问题描述】: 我试图在树视图的每个项目中添加一个按钮。单击按钮时: - 如果有所选父项的某些项目,则展开树 - 如果不是父母:做一个动作。 双重动作将允许我完全删除切换按钮。 所以这就是我到目前为止发现的:
        <TreeView>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="Binding Items" >
                    <Button  Content ="Binding Title" Click="OnItemClick"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

我的下一步是更改树视图的样式,以便只有一个按钮可以完成所有工作。因此,取决于它是否是某物的父项,按钮将展开新项目或将在代码中执行操作。

    public void OnItemClick(object sender, RoutedEventArgs args)
    
        FrameworkElement parent = (FrameworkElement)((Button)sender).Parent;

        if (parent is TreeViewItem)
        
            //ACTION

        
        else
           //EXPAND
        Console.WriteLine(parent);

    

所以当我得到按钮的父元素时,我想检查父按钮(treeitemview)是否可扩展。但是现在我得到的父母总是空的。 所以阻塞步骤是:

有没有办法获取按钮的父级类型(treeitemview)并检查它是否可扩展?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用以下辅助方法在可视化树中找到父 TreeViewItem

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject

    var parent = VisualTreeHelper.GetParent(dependencyObject);
    if (parent == null)
        return null;

    var parentT = parent as T;
    return parentT ?? FindParent<T>(parent);

用法:

TreeViewItem parent = FindParent<TreeViewItem>((Button)sender);
if (parent != null)
    //ACTION

【讨论】:

一个非常好的解决方案,非常干净。 PS:如果有人问....父对象将返回“可能”父对象中的项目数。通过这种方式,您将扩展或不扩展父树视图。谢谢

以上是关于WPF 树视图展开操作的主要内容,如果未能解决你的问题,请参考以下文章

树视图项目不展开

WPF TreeView 数据绑定隐藏/显示展开/折叠图标

带有复选框的 C# WPF 目录树视图:检查构建项目失败,PropertyChanged 为空

从 wpf 中的文件路径列表填充树视图

wpf树视图绑定[关闭]

将复合对象绑定到树视图 WPF