将任何 XML 文档绑定到 WPF TreeView

2023-11-21

我想使用 TypeConverter 将任何 XML 文档绑定到 WPF TreeView。

我最初的解决方案是使用递归,但是当文档很大时,UI 就会严重依赖。

以下链接讨论了 TypeConverter,但针对特定的节点/元素组合:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/edd843b7-b378-4c2d-926f-c053dbd7b340

如果不知道 XML 文档是什么样子怎么办?由于这仅用于显示目的,所以此时我不太关心功能,我只想将 XML 绑定到 TreeView。


只需进行一些简单的修改,它就适用于其他节点类型。首先,HierarchicalDataTemplate.ItemsSource Binding XPath 必须更改为“child::node()|attribute::*”以允许任何子节点和任何属性。然后,为其他 NodeType 添加 DataTrigger。下面的例子对我有用。请注意,我添加了各种 NodeType 的图标,您可能想要删除它们:

        <HierarchicalDataTemplate x:Key="NodeTemplate">
        <StackPanel Orientation="Horizontal">
        <Image x:Name="icon" VerticalAlignment="Center" Margin="1,1,4,1"/>
        <TextBlock x:Name="name" Text="" />
        <TextBlock x:Name="inter" Text="" />
        <TextBlock x:Name="value" Text="" />
        </StackPanel>
        <HierarchicalDataTemplate.ItemsSource>
            <Binding XPath="child::node()|attribute::*" />
        </HierarchicalDataTemplate.ItemsSource>
        <HierarchicalDataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
                <Setter TargetName="icon" Property="Source" Value="icons/element.png"></Setter>
                <Setter TargetName="name" Property="Text" Value="{Binding Path=Name}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Text">
                <Setter TargetName="icon" Property="Source" Value="icons/text.png"></Setter>
                <Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Attribute">
                <Setter TargetName="icon" Property="Source" Value="icons/attribute.png"></Setter>
                <Setter TargetName="name" Property="Text" Value="{Binding Path=Name}"></Setter>
                <Setter TargetName="inter" Property="Text" Value=": "></Setter>
                <Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="CDATA">
                <Setter TargetName="icon" Property="Source" Value="icons/cdata.png"></Setter>
                <Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Comment">
                <Setter TargetName="icon" Property="Source" Value="icons/comment.png"></Setter>
                <Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="ProcessingInstruction">
                <Setter TargetName="icon" Property="Source" Value="icons/pi.png"></Setter>
                <Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
            </DataTrigger>
        </HierarchicalDataTemplate.Triggers>
    </HierarchicalDataTemplate>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将任何 XML 文档绑定到 WPF TreeView 的相关文章

随机推荐

  • 在 IntelliJ 中调试时是否可以观看 BufferedImage 对象?

    在 IntelliJ 中调试时是否可以观看 BufferedImage 对象 我的意思是查看图像的视觉内容 而不是记忆身份 是否也可以直观地查看自定义对象 即编写一些自定义可视化工具 IntelliJ IDEA 2016 1 1 能够显示B
  • 管理 Firebase 聊天中的未读消息

    我正在构建实时聊天 与 Skype 非常相似 我使用 firebase 作为后端 在客户端使用 Angularfire 基本上 所有事情看起来都很清楚 但我坚持一件事 显示未读消息数 应用程序使用非常简单的 Firebase 设计 2 个或
  • 使用 pdfsharp 添加 acroform

    我如何将带有 pdfsharp lib 的 Acroforms 或任何输入字段 添加到 pdf 中 例如文本框 PdfSharp Pdf AcroForms PdfTextField 我找不到任何示例 只能读取 修改 我找到了 page g
  • 为什么Ajax.BeginForm提交后重定向到新的空页面?

    为什么 Ajax BeginForm 在提交后将我的页面重定向到新的空页面 我的控制器代码是 HttpPost public void ProductCommentAdd int productId string text Do somet
  • 在 Rails 6 中使用 activestorage 时,如何在重新显示表单时保留文件?

    在 Rails 6 中 我有一个带有文件字段的表单 我使用 activestorage 来存储文件 如果提交表单后验证失败 则会重新显示表单并显示验证错误 重新显示表单时如何保留添加到文件字段的文件 以便用户不必再次将文件添加到表单 Rai
  • 在另一个类中处理 JButton 单击事件

    我是来自 C 的 java 新手 所以我不熟悉 java 最佳实践 我有一个主类 它打开 JFrame 以从用户那里获取多个输入字符串 当用户单击 提交 时 GUI 应关闭 主类将继续使用输入进行处理 This is the main cl
  • 如何在 Polymer 2.0 中启用 Shady DOM?

    聚合物 1 x 用途阴暗的 DOM默认情况下 但可以在初始化时通过设置来更改window Polymer导入前的对象polymer html如下 然而 Polymer 2 0 似乎使用影子 DOM不管window Polymer dom s
  • Twitter bootstrap:模式淡入淡出

    我的 twitter bootstrap 模式有问题 当我没有的时候它工作得很好 fade我的元素上的类 一旦我添加它 模式就不会显示 我将问题追查到这一行 我认为 doAnimate this backdrop one transitio
  • 如何使用 cmake 设置嵌套子目录的 Visual Studio 过滤器

    我有以下结构 Main dir CMakeLists txt File cpp File hpp Dir dir CMakeLists txt File1 cpp File1 hpp File2 cpp File2 hpp 主要 CMake
  • 如何对对象数组进行字符串化?

    我创建了一个需要存储并保留到另一个页面的对象数组 对象数组与此类似 var cheese array name Chedder age 34 smelly true name Brie age 4 smelly false name Blu
  • IE 中的 HTML 实体和字符集

    我正在显示 html 实体 10003 复选标记 在使用 iso 8859 1 作为字符集的 html 文档中 在 Firefox 中 它显示为复选标记 在 IE 中 它显示为一个方框 切换到 UTF 8 似乎没有什么区别 有没有一种可靠的
  • Javascript正则表达式字符串中的货币符号

    所以我有一个格式化字符串可以是 00 or 00我想获取货币符号 这里是我正在使用的代码 currencySymbol format match p Sc 我希望currencySymbol 等于 或 但它不起作用 currencySymb
  • MS SQL Server - 通过网络批量插入

    我有一个使用 MS SQL Server 的应用程序 我需要从文件中进行批量插入 症结在于数据库和我的应用程序将托管在不同的服务器上 通过网络进行批量插入的最佳方法是什么 到目前为止我想到的两个想法 从应用程序服务器共享数据库服务器可以找到
  • 无法使用bundle exec找到rake

    当我尝试执行 捆绑执行耙任何东西 我收到错误 Could not find rake 10 1 0 in any of the sources Run bundle install to install missing gems 但是当我执
  • 线程化 Delphi ADO 查询

    我有一个查询代码 每次需要从数据库获取数据时都可以调用它 并且我希望它是线程化的 不知道如何在线程中实现此代码 以便我可以重用此代码 基本上 我希望此代码在线程中 我知道如何在线程内创建一个简单的数据库查询 但想要一些可以重用的东西 谁能指
  • JavaScript获取url段和参数

    我读过一些问题 但我仍然不知道该怎么做我有一个网址example com event 14aD9Uxp p 10 在这里我想得到14aD9Uxp和 p 的值我尝试过使用split p 但这不起作用我想使用正则表达式 但我不太明白如何使用它
  • 在桌面上运行时如何将 Windows 10 通用应用程序的窗口最大化至全屏?

    使用 Windows 10 或 Windows 8 1 WinRT 构建通用应用程序时 是否可以强制应用程序的主窗口在启动时最大化 这显然是应用程序在移动设备上运行时的自然行为 但在桌面上运行时则不然 使用 WinForms 这当然是可能的
  • 在 Spring Boot 中使用 Angular 启用 Cors,仍然存在 Cors 错误

    我为所有来源和标头启用了 cors 但当我调用 a 时 我仍然收到 cors 错误get从我的角度应用程序到 Spring Boot 的方法 来自控制台的 Cors 错误 Access to XMLHttpRequest at http l
  • 返回任务是否违反了 CQS 原则?

    CQS 原则 https en wikipedia org wiki Command E2 80 93query separation 指出命令应返回 void 对于异步方法的建议是永远不要返回 void https msdn micros
  • 将任何 XML 文档绑定到 WPF TreeView

    我想使用 TypeConverter 将任何 XML 文档绑定到 WPF TreeView 我最初的解决方案是使用递归 但是当文档很大时 UI 就会严重依赖 以下链接讨论了 TypeConverter 但针对特定的节点 元素组合 http