在前面“在WPF中,如何得到任何Object对象的XAML代码?”一文中,我介绍了使用System.Windows.Markup.XamlWriter.Save(objName)得到任何Object对象的XAML代码。,那么,又怎样将XAML代码加载为相应的对象呢?
分两种情况来讲这个问题:
1、在程序中,XAML代码已是内存字符串时:
比如:
string xamlContent =@"<Button Height=""50"" Width=""100"" Background=""#FFF0F8FF"" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">Click Me</Button>";
那么,我们可以直接使用StringReader和XmlReader:
StringReader stringReader = new StringReader(xamlContent);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
注意:需要显式地将对象转换为相应的类型。比如这里使用了(Button)进行显示转换。
2、加载的是包含XAML代码的文件:
string xamlFileName = @"c:/myButton.xaml";
string xamlContent = string.Empty;
try
{
using (StreamReader sr = new StreamReader(xamlFileName))
{
xamlContent = sr.ReadToEnd();
}
}
catch (Exception e)
{
//
}
// 以下同上
StringReader stringReader = new StringReader(xamlContent);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);