2013-07-24 42 views
1

在使用Visual Studio 2012設計器的Windows Store應用程序中,我希望能夠爲設計器加載一些模型對象。在我使用ms-appx:/// uri提供一個xaml文件之前,我已經做了很多次這樣的操作。但是,對於這個項目,我需要能夠實例化一個類,並讓它將不同格式的原始xml轉換爲我的模型對象。使用XDocument.Load訪問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'. 

任何人都可以在設計器實例化對象時從文件系統加載文件嗎?

感謝, -Jeff

回答

0

XDocument.Load(string uri)似乎與加載項目資源的問題從ms-appx:/

關於你提到的第二個辦法:直接進入 「C:」 是不允許的。 Ther只有少數您可以訪問的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);