You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF TreeView XML绑定代码在.NET 6.0失效但.NET Framework 4.7.2可用

.NET 6 WPF中XmlDataProvider绑定XML运行时失效的原因及解决方案

问题描述

做学习练习时,我尝试纯用XAML将XML数据加载到WPF TreeView控件,参考微软官方示例后,在Visual Studio 2022中创建.NET 6(TargetFramework=net6.0-windows)的WPF项目时,设计器能正常显示数据,但程序运行时却加载失败;而创建.NET Framework 4.7.2的项目则完全正常。我计划开发Windows 10上的小型C#/WPF应用,现在对.NET版本选择感到困惑,希望了解代码失效的原因,并得到项目选型建议。

相关代码

MainWindow.xaml

<Window x:Class="XMLTreeView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:XMLTreeView"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <XmlDataProvider x:Key="XmlData" Source="Tree.xml" XPath="Folders"/>

        <HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=./Folder}">
            <TextBlock Text="{Binding XPath=@Name}"/>
        </HierarchicalDataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView Width="400"
                  ItemsSource="{Binding Source={StaticResource XmlData}}"
                  ItemTemplate="{Binding Source={StaticResource ItemTemplate}}"/>
    </Grid>
</Window>

Tree.xml

<Folders>
  <Folder Name="Adolph Henselt">
    <Folder Name="Henselt Piano Works" />
  </Folder>
  <Folder Name="Alexander Borodin">
    <Folder Name="String Quartet Nos. 1 and 2" />
    <Folder Name="Symphony No. 2, Polovtsian Dances" />
  </Folder>
  ....
</Folders>

失效原因

  1. 文件复制行为差异:
    .NET Framework和.NET 6+的WPF项目对非代码文件的默认复制规则不同:
    • .NET Framework中,XML文件默认的"复制到输出目录"属性是"如果较新则复制",编译时会把文件同步到输出文件夹,运行时程序能找到文件
    • .NET 6的WPF项目中,XML文件默认该属性为"不复制",导致运行时输出目录里没有Tree.xml,XmlDataProvider找不到数据源,绑定失效;而设计器直接读取项目中的源文件,所以能正常显示。
  2. XML语法错误:你的XML代码最后一行</Folders缺少闭合的>,虽然设计器可能有容错处理,但建议修正避免后续问题。

解决方法

  • 调整XML文件复制属性:在Visual Studio中选中Tree.xml,打开属性窗口,将"复制到输出目录"改为"如果较新则复制"或"始终复制"。
  • 修正XML语法:把最后一行的</Folders改为</Folders>。

项目选型建议

针对Windows 10的小型WPF应用,优先选择**.NET 6/7/8**,理由如下:

  • .NET 6+是微软长期支持(LTS)版本,后续维护更新周期更长,性能比.NET Framework更优。
  • 支持最新的C#语法特性,能提升开发效率,简化代码逻辑。
  • WPF在.NET Core 3.0之后就已成熟稳定,和Windows 10的兼容性完全没问题。
  • 只有需要兼容已停止支持的Windows 7时,才考虑.NET Framework;否则没必要放弃.NET的新特性。
  • 小型应用的迁移和适配成本极低,遇到的兼容性问题大多可通过调整配置或小幅度修改代码解决。

内容的提问来源于stack exchange,提问作者RETierney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:01:17