wpf - 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)是否可扩展。但是现在我得到的父母总是空的。所以阻塞步骤是:
- 有没有办法获取按钮的父级类型(treeitemview)并检查它是否可扩展?
谢谢
解决方案
您可以使用以下辅助方法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
推荐阅读
- python - 在 python 中获取画布坐标 - 特别是对于 mac
- kotlin - 如何在 kotlin 中随流观察属性?
- javascript - 将文件 csv 上传到表 react.js
- python - 两个分类器的 P 值
- r - 找出 2 个不同长度的数据帧之间的差异
- python - 语法和更改变量值
- sql - 如何从事务事实表生成时间点快照表?
- c++ - 将 Google Crashpad 与 Linux 应用程序集成
- apache-kafka - 来自 Kafka 任务的 TaskId
- i2c - 每次输入命令时,Raspberry pi 4 上的 i2cdetect 都会显示不同的地址