2012-12-13 38 views
1

我有一个任务,写下一个简单的查看器,它将显示.xaml文件的外观(与VS编辑器相似,但不具备编辑功能)。你能给我任何可以帮助我的参考吗?如何可视化XAML

+0

这有帮助吗? http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a53ff197-8703-4c6c-8726-45570304fb7b/ –

回答

2

可以使用XamlReader.Load方法

如果你想只有观众,没有一个设计师,你可以调用XamlReader.Load方法和结果分配给ContentControl.Content

StringReader stringReader = new StringReader(strXaml); 
XmlReader xmlReader = XmlReader.Create(stringReader); 
myContentControl.Content = (Button)XamlReader.Load(xmlReader); 

编辑 从这个代码加载窗口xaml并显示它

string strXaml = "<Window xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" Title=\"MainWindow\" Height=\"350\" Width=\"525\">" + 
     "<Grid> <Button Content=\"Button123\" Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"174,41,0,0\" Name=\"button1\" VerticalAlignment=\"Top\" Width=\"75\" />"+ 
     "</Grid></Window>"; 

StringReader stringReader = new StringReader(strXaml); 

XmlReader xmlReader = XmlReader.Create(stringReader); 
Window obj = (Window)XamlReader.Load(xmlReader); 

obj.Show(); 

如果你确定根元素是全能的窗口,你可以跳过它。这样的事情对我的作品

StringReader stringReader = new StringReader(strXaml); 
var xDoc = XDocument.Load(stringReader).Document.Descendants().First().DescendantNodes().First(); 

XmlReader xmlReader = xDoc.CreateReader(); 
uc.Content = XamlReader.Load(xmlReader); 

将是更好的检查,如果窗口跳过它

+0

你试过这段代码吗?我得到“根层数据无效,第1行,第1位”。 –

+0

这是因为你的xaml是无效的,是的它的工作原理...请确保你的xaml只有一个根。 –

+0

标准wpf应用程序的mainwindow.xaml文件。最后一行是“this.content = ...” –

2

假设之前存在与否,这将有助于:Kaxaml编辑 [link] - 与可视化XAML编辑器,开源和下发布MIT许可证。

0

KAXAML是这样做的,它的开源代码是githubcodeplex,我会在那里看看。

尤其this是XAML文件确实显示