在 WPF C# TreeView 中获取子节点的父节点

2023-11-26

我知道使用 WPF 进行 C# 编程与传统的 C# 程序不同,因此大多数在线材料都没有说明我需要什么。

我的 WPF 窗口中有一个 TreeView 控件,其中有父节点和子节点。我想将它们存储在 Node 类型的列表中(id、name、parent)。

enter image description here

我使用以下命令获取了所选项目/节点的名称:

private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
{
    TreeViewItem item = treeView.SelectedItem as TreeViewItem;
    nameTxt.Text = item.Header.ToString();
}

我尝试在使用以下命令之前立即获取子节点的父节点:

TreeViewItem item = treeView.SelectedItem as TreeViewItem;
nameTxt.Text = item.Parent.ToString();

但是,这会返回根父级 (A),而不是子级的父级(即 2)。

我应该做哪些更改才能获得孩子的直接父级而不是根父级? :)

编辑:这是 XAML

<TreeView Name="treeView" HorizontalAlignment="Left" Height="564" Margin="10,68,0,0" VerticalAlignment="Top" Width="363">
     <TreeViewItem TreeViewItem.Selected="TreeViewItem_OnItemSelected"  Header="A" IsExpanded="True" Height="554" FontSize="18">
                <TreeViewItem Header="1" />
                <TreeViewItem Header="2" />
     </TreeViewItem>
</TreeView>

创建了一个小例子来演示您的问题

In 主窗口.xaml

 <TreeView Name="tree">
    <TreeView>
        <TreeViewItem Header="North America" Selected="TreeViewItem_OnItemSelected">
            <TreeViewItem Header="USA">
                <TreeViewItem Header="New York"/>
                <TreeViewItem Header="Las Vegas"/>
                <TreeViewItem Header="Washington"/>
            </TreeViewItem>
            <TreeViewItem Header="Canada">
                <TreeViewItem Header="Toronto"/>
                <TreeViewItem Header="Quebec"/>
                <TreeViewItem Header="Montreal"/>
            </TreeViewItem>
            <TreeViewItem Header="Mexico"></TreeViewItem>
        </TreeViewItem>
    </TreeView>
</TreeView>

在代码隐藏中,即MainWindow.xaml.cs

 private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
    {
        TreeViewItem item = e.OriginalSource as TreeViewItem;
        if (item != null)
        {
            ItemsControl parent = GetSelectedTreeViewItemParent(item);

            TreeViewItem treeitem = parent as TreeViewItem;
            string MyValue= treeitem .Header.ToString();//Gets you the immediate parent
        }
    }
    public ItemsControl GetSelectedTreeViewItemParent(TreeViewItem item)
    {
        DependencyObject parent = VisualTreeHelper.GetParent(item);
        while (!(parent is TreeViewItem || parent is TreeView))
        {
            parent = VisualTreeHelper.GetParent(parent);
        }

        return parent as ItemsControl;
    }

完成了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WPF C# TreeView 中获取子节点的父节点 的相关文章

随机推荐

  • 在azure中设置webapp%PATH%环境变量

    我正在开发一个 azure webapp 项目 为了使我的应用程序正常工作 我需要在服务器上安装第三方开源软件 我发现在 azure webapp 上执行此操作的唯一方法是手动复制项目上软件的所有文件夹 然后添加所有必需的环境变量 并向路径
  • 我应该扔掉一个弦乐作家吗?或以某种方式重用?

    我会让事情变得简单 我有一个字符串编写器作为类成员 因此我不能使用 using 每次调用某个函数时我都想要一个空的软件 我应该在 sw 上调用 Dispose 并分配一个新对象吗 或者我应该做一些类似 close 的事情并做其他事情来清空缓
  • 将地址传递给数组而不是数组会导致问题吗?

    我遇到了这段代码 char str 600 scanf s str 当然 这会发出这个警告 a c 6 17 warning format specifies type char but the argument has type char
  • 在闪亮的应用程序部署中隐藏密钥

    我正在使用从 S3 获取的数据将应用程序部署到shinyapps io 并且我想确保我的 AWS 密钥是安全的 目前 在 app R 代码中 我正在设置环境变量 然后查询 S3 以获取数据 有没有办法创建一个隐藏密钥的文件并将其与我的 ap
  • 如何使用 ctypes 将 Python 列表转换为 C 数组?

    如果我有以下两组代码 如何将它们粘合在一起 void c function void ptr int i for i 0 i lt 10 i printf p ptr i return def python routine y x for
  • 对于移动应用程序来说,正确的 OAuth 2.0 流程是什么

    我正在尝试使用 OAuth 2 0 在移动应用程序的 Web API 中实现委派授权 根据规范 隐式授权流程不支持刷新令牌 这意味着一旦在特定时间段内授予访问令牌 一旦令牌过期或被撤销 用户必须再次向应用程序授予权限 我想对于在浏览器上运行
  • iOS 7 Sprite Kit 释放内存

    我正在构建一款针对新 iOS 7 和 Sprite Kit 的 iOS 游戏 使用发射器节点和物理来增强游戏玩法 在开发应用程序时 我遇到了一个严重的问题 您创建了场景 节点 效果 但是当您完成并需要返回主屏幕时 如何释放这些资源分配的所有
  • HTML5 iFrame 高度仅为 150px

    基本上我想做的是在页面顶部有一个单一的 薄的工具栏 其中有一排各种 DIV 容器用作按钮 我希望这些按钮能够更新工具栏下方 iframe 的内容 问题是我的工具栏下方的 iframe 高度只有 150px 具体来说 当我指定时会发生这种情况
  • 使用jedis如何写入redis集群中的特定槽/节点

    我正在尝试提高将数据写入redis集群的性能 我们计划从 redi sentinel 迁移到集群模式以实现可扩展性 但是 与redis sentinel相比 写操作的性能要差很多 我们在redis sentinel中利用了管道 但集群模式不
  • 在 PHP 中迭代复杂的关联数组

    有没有一种简单的方法可以在 PHP 中迭代此结构的关联数组 数组 searches有一个编号索引 包含 4 到 5 个关联部分 所以我不仅需要迭代 searches 0 通过 searches n 但是也 searches 0 part0
  • 获取有关 MATLAB com.mathworks 内部结构的帮助

    可以访问 MATLAB 的内部 java 代码位 以编程方式更改 MATLAB 本身 例如 您可以使用以下命令以编程方式在编辑器中打开文档 editorServices com mathworks mlservices MLEditorSe
  • UITableView自定义滚动条

    如何为 UITableView 创建自定义滚动条 我想删除跟踪开始时弹出并在跟踪结束时消失的默认选项 相反 我想要一个类似于计算机程序中的程序 a 它位于屏幕的右侧并且永久可见 b 手动滚动栏会将 UITableView 滚动到适当的位置
  • 禁用特定 GDI 设备上下文的抗锯齿功能

    我正在使用第三方库将图像渲染到 GDI DC 并且我需要确保渲染任何文本时都不会进行任何平滑 抗锯齿 以便我可以将图像转换为具有索引颜色的预定义调色板 我用于渲染的第三方库不支持此功能 并且仅根据当前 Windows 设置的字体渲染来渲染文
  • 如何在 Haskell 中使用策略编写并行归约?

    在高性能计算中 总和 乘积等通常使用 并行归约 来计算 该方法需要n元素并在 O logn 时间 给定足够的并行性 在 Haskell 中 我们通常使用fold对于这种计算 但评估时间始终与列表的长度呈线性关系 Data Parallel
  • 固定宽度整数类型是否保证是标准内置类型的 typedef?

    类型是否来自
  • 如何在写入后清除 PrintWriter 的内容

    晚上好 我想知道如何清除写入PrintWriter的数据 即打印后是否可以从PrintWriter中删除数据 在此 servlet 中 我将一些文本打印到响应中 并在 表示的行处 我想删除所有以前打印的数据并打印新内容 protected
  • Kivy 布局高度适应子部件的高度

    我想创建一个布局 其中有类似于 BoxLayout 的内容 以便我能够在布局中创建 行 并且在每个 行 中我想使用另一个 BoxLayout 中的某些内容来创建 列 列不需要均匀分布 例如 我想创建一个 BoxLayout 其中一列带有方形
  • 如何在codeigniter中的hmvc中的另一个模块中加载模型?

    我想在我的项目中使用模块化扩展 HMVC 如下所示 modules module01 models models01 php controllers controller01 php views views01 php module02 m
  • 我应该切换到Python吗? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我最近一直在考虑转向Python编程语言 目前 Matlab 是我所在部门用于快速开发和
  • 在 WPF C# TreeView 中获取子节点的父节点

    我知道使用 WPF 进行 C 编程与传统的 C 程序不同 因此大多数在线材料都没有说明我需要什么 我的 WPF 窗口中有一个 TreeView 控件 其中有父节点和子节点 我想将它们存储在 Node 类型的列表中 id name paren