让XamlReader与VS 2015一起使用

时间:2015-09-12 07:37:26

标签: c# xaml visual-studio-2015

我花了很多时间试图让XamlReader与VS 2015合作。我遇到的所有示例(包括MSDN)都会产生编译错误(!)。

以下是我最好的尝试(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:无法转换为' string'至   ' Microsoft.Win32.SafeHandles.SafeFileHandle'

即使FilStream(string, FileAccess)被列为有效的构造函数!

2 个答案:

答案 0 :(得分:0)

仅供注意:您的问题与您正在使用的Visual Studio版本完全没有任何关系。

你可以试试这个。

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

" Load"没有过载。将字符串作为参数的方法 请参阅此处的MSDN文档https://msdn.microsoft.com/en-us/library/system.windows.markup.xamlreader(v=vs.110).aspx 所以你必须得到编译时错误。

你可以像这样使用Parse方法

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

这是Parse方法的文档。 https://msdn.microsoft.com/en-us/library/cc663033(v=vs.110).aspx

尝试使用StreamReader的构造函数

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

答案 1 :(得分:0)

这是您使用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;
    
  3. 工作得很好!