首页 > 解决方案 > WPF 树视图展开操作

问题描述


我试图在树视图的每个项目中添加一个按钮。单击按钮时:-如果存在所选父项的某些项目,则展开树-如果不是父项:执行操作。双重动作将允许我完全删除切换按钮。所以这就是我到目前为止发现的:
        <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)是否可扩展。但是现在我得到的父母总是空的。所以阻塞步骤是:

谢谢

标签: wpfclicktreeview

解决方案


您可以使用以下辅助方法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

推荐阅读