【问题标题】:How to add a resource : xml file如何添加资源:xml文件
【发布时间】:2011-04-30 11:47:35
【问题描述】:

我目前正在使用以下 XAML 代码将我的 xml 文件添加为资源:

<XmlDataProvider x:Key="MyData"  Source="D:\myfile.xml" XPath="Books/Book" />

现在我想使用 %appdata% 文件夹中的 myfile.xml 来获得更多的可移植性。显然,使用 Source="%appdata%\myfile.xml" 不起作用,因为 XAML 似乎不接受 "%" 字符。

因此,我想在我的主窗口代码中以编程方式添加此资源。我试过了:

public MainWindow()
{
    this.Resources.Add("MyData", "D:\\myfile.xml");
    InitializeComponent();
}

但是我在 Resources.Add 方法中没有可用的 XPath="" 属性,因此应用程序无法正常工作。

有没有办法设置这个属性?还是我做错了?

谷歌对此没有答案。

非常感谢。

【问题讨论】:

    标签: c# wpf xml resources


    【解决方案1】:

    您可以在代码隐藏中使用这个 sn-p:

    public MainWindow()
    {
        XmlDataProvider provider = new XmlDataProvider()
        provider.Source = new Uri(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myfile.xml");
        provider.XPath = "Books/Book";
        this.Resources.Add("MyData", provider);
    }
    

    这是添加资源的正确代码

     this.Resources.Add("MyData", "D:\\myfile.xml");
    

    将向 Recources 添加键为“MyData”且值为“D:\myfile.xml”的字符串

    或者您仍然可以使用 XAML 声明,然后在构造函数中添加:

    (this.Resources["MyData"] as XmlDataProvider).Source = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myfile.xml";
    (this.Resources["MyData"] as XmlDataProvider).XPath = "Books/Book";
    

    我建议最后一个解决方案。

    【讨论】:

    • 谢谢 Mattias,它适用于第二种解决方案。我只需要更改: Uri booksfile_path = new Uri(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myfile.xml");因为 .Source 方法不接受字符串,而是接受 Uri。
    • 一件事是,现在,有了这个实现,加载我的 xml 内容(我将它显示在一个列表框中)花费了更多的时间,差不多 5 秒。就像之前的1秒。我能做些什么来缩短这个?
    • 我不知道...但是,我正在用您的代码修改我的帖子,以供其他用户进一步参考。
    猜你喜欢
    • 2011-08-07
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多