1

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

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

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

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

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'.  

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

谢谢,-杰夫

4

1 回答 1

0

XDocument.Load(string uri)似乎从加载项目资源时遇到问题ms-appx:/

关于您的第二种方法:不允许直接访问“C:”。您可以访问的只有少数几个 特殊文件夹。查看我的解决方法(我的 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);
于 2013-09-28T08:16:34.773 回答