2015-09-12 79 views
0

我花了很多時間試圖讓XamlReader與VS 2015一起工作。我遇到的所有示例(包括MSDN)都會產生編譯錯誤(!)。使XamlReader與VS 2015一起工作

這裏是我最好的嘗試(MyXAMLFile.xaml是我的項目的一部分):

StreamReader streamReader = new StreamReader("MyXAMLFile.xaml"); 
String xamlContent= streamReader.ReadToEnd(); 
FrameworkElement rootObject = XamlReader.Load(xamlContent) as FrameworkElement; 

上StreamReader的構造函數給出編譯錯誤。

參數1不能轉換字符串的System.IO.Stream

事實上,StreamReader(string)不會出現在構造函數列表中,儘管例子表明,這樣的構造應該是。

的另一種嘗試:

FileStream fileStream = new FileStream("MyXAMLPage.xml", FileAccess.Read); 
StreamReader streamReader = new StreamReader(fileStream); 
String xamlContent= streamReader.ReadToEnd(); 
FrameworkElement rootObject = XamlReader.Load(xamlContent) as FrameworkElement; 

這一次的StreamReader初始化被接受,但編譯錯誤是FileStream

參數1:無法從 '字符串' 轉換爲 「的Microsoft.Win32 .SafeHandles.SafeFileHandle'

即使FilStream(string, FileAccess)被列爲一個有效的構造函數!

回答

0

只是爲了說明:您的問題與您使用的Visual Studio版本完全沒有任何關係。

你可以試試這個。

StreamReader streamReader = new StreamReader("MyXAMLFile.xaml"); 
FrameworkElement rootObject = XamlReader.Load(streamReader) as FrameworkElement; 

有沒有過載「加載」方法,它需要一個字符串作爲參數 看到MSDN文檔這裏https://msdn.microsoft.com/en-us/library/system.windows.markup.xamlreader(v=vs.110).aspx 所以你必須得到編譯時錯誤。

您可以用解析方法,而不是像這樣

StreamReader streamReader = new StreamReader("MyXAMLFile.xaml"); 
String xamlContent= streamReader.ReadToEnd(); 
object rootObject = XamlReader.Parse(xamlContent); 
// here parse the rootObject to the appropriate type. 

這裏是解析方法的文檔。 https://msdn.microsoft.com/en-us/library/cc663033(v=vs.110).aspx

嘗試一下本作的StreamReader的

StreamReader r = new StreamReader(path:"MyXAMLFile.xaml"); 
+0

這可能是另一個問題,但它仍然不能解釋爲什麼我得到StreamReader構造函數的編譯錯誤。請注意,XamlReader.Load不會提供編譯錯誤! – cyanide

+0

@cyanide我更新了我的答案,包括可能的解決方案StreamReader構造函數 –

+0

@cyanide爲什麼「我是另一個問題」,請你爲我解釋一下。問題的答案 –

0

的constrcutor這是你如何與Windows 8和Windows 10

  1. 做你的XAML文件重命名爲XML(否則它將被排除在項目之外)。

  2. 的代碼如下:

    string xamlPath = Path.Combine(Package.Current.InstalledLocation.Path, "MyXAMLFile.xml"); 
    XDocument xamlContent = XDocument.Load(xamlPath); 
    FrameworkElement rootObject = XamlReader.Load(xamlContent.ToString()) as FrameworkElement; 
    

作品好了!