【问题标题】:WPF Treeview Expand ActionWPF 树视图展开操作
【发布时间】: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)并检查它是否可扩展?

谢谢

【问题讨论】:

    标签: wpf click treeview


    【解决方案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:如果有人问....父对象将返回“可能”父对象中的项目数。通过这种方式,您将扩展或不扩展父树视图。谢谢
    猜你喜欢
    • 2010-12-15
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2020-04-02
    • 2012-01-19
    相关资源
    最近更新 更多