使用XDocument.Load访问xml文件时的设计时实例化问题

时间:2013-07-24 19:59:44

标签: windows-store-apps designer

在使用Visual Studio 2012设计器的Windows应用商店应用中,我希望能够为设计器加载一些模型对象。在我使用ms-appx:/// uri提供xaml文件之前,我已经做了很多次没有错误。但是,对于这个项目,我需要能够实例化一个类,并将它转换为我的模型对象的原始xml。

我正在使用以下xaml为设计器实例化我的类:

d:DataContext="{Binding Source={d:DesignInstance Type=model:Walkthroughs, IsDesignTimeCreatable=True}}"

在我的Walkthroughs课程中,代码最初执行了此操作:

public Walkthroughs()
{
        if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
            AppDataLoader.LoadWalkthroughs(this, XDocument.Load("ms-appx:///SampleData/walkthroughs.xml"));
}

我第一次遇到XDocument.Load不理解ms-appx:/// uri的问题所以我将代码修改为非常简单的代码:

AppDataLoader.LoadWalkthroughs(this, XDocument.Load(@"C:\walkthroughs.xml"));

现在我可以访问路径''被拒绝。

我已经尝试了几个目录也无济于事。我甚至以管理员身份运行Visual Studio。如果我完全删除前缀,我会收到以下错误:

Could not find file 'C:\Users\{me}\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\omxyijbu.m4y\yofsmg1x.avh\walkthroughs.xml'.  

当设计者实例化对象时,是否有人能够从文件系统加载文件?

谢谢, -Jeff

1 个答案:

答案 0 :(得分:0)

XDocument.Load(string uri)似乎在从ms-appx:/

加载项目资源时遇到问题

关于您的第二种方法:不允许直接访问“C:”。您只能访问少量的special folders。查看我的解决方法(我的xml文件位于我项目的Assets文件夹中:

var storageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
storageFolder = await storageFolder.GetFolderAsync("Assets");
var xmlFile = await storageFolder.GetFileAsync("data.xml");
var stream = await xmlFile.OpenReadAsync();           
var rdr = new StreamReader(stream.AsStream(), System.Text.Encoding.GetEncoding("ISO-8859-1")); //needed if you have "ä,ß..." in your xml file
var doc = XDocument.Load(rdr);