2

我的任务是写下一个简单的查看器,它可以显示 .xaml 文件的外观(就像 VS 编辑器一样,但没有编辑功能)。你能给我一些对我有帮助的参考吗?

4

4 回答 4

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();

如果您确定根元素始终是 Window,则可以跳过它。像这样的东西对我有用

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

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

最好在跳过它之前检查 Window 是否存在

于 2012-12-13T13:31:29.673 回答
2

假设这会有所帮助: Kaxaml 编辑器[链接] - 带有可视化工具的 xaml 编辑器,开源并在 MIT 许可下发布。

于 2012-12-13T13:31:45.570 回答
2

您应该从查看XamlServices类及其Parse方法开始。

于 2012-12-13T13:32:38.677 回答
0

KAXAML 就是这样做的,它在githubcodeplex上是开源的,我会去那里看看。

特别是,是执行显示的 XAML 文件

于 2012-12-13T13:32:38.237 回答