在使用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
答案 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);