我花了很多时间试图让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)
被列为有效的构造函数!
答案 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的方法。
将您的xaml文件重命名为xml(否则它将从项目中排除为冗余)。
代码如下:
string xamlPath = Path.Combine(Package.Current.InstalledLocation.Path, "MyXAMLFile.xml");
XDocument xamlContent = XDocument.Load(xamlPath);
FrameworkElement rootObject = XamlReader.Load(xamlContent.ToString()) as FrameworkElement;
工作得很好!