WPF通常用Xaml格式创建对象树。您还可以使用XamlWriter类进行反方向操作——将对象树写入Xaml。
对于XamlWriter来说,将对象转换成良好的Xaml表示形式通常很容易。但是,您不能总是通过查看对象的属性就知道如何将对象写入Xaml。当你创建一个新类时,你需要做一些事情,使你的类在XamlWriter中工作得更好。
XamlWriter 是什么?
XamlWriter是一个允许你从对象创建Xaml的类。对象的类型可以不是WPF特有的,您可以对任何托管类型使用XamlWriter和XamlReader,例如在c#、VB中创建的那些类型。
假设我们用这样的代码片段创建了一个Button对象:
Button button = new Button();
button.Width = 100.0;
button.Background = Brushes.Red;
想把它写成Xaml,可以用这样的代码:
string xamlString = XamlWriter.Save( button );
其结果xamlString 的内容是这样的:
<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Width="100" Background="Red"/>
长的xmlns Uri用于将标记映射到程序集。这很有用,但是有点分散注意力,所以我先不讲了。因此它只是:<Button Width="100" Background="Red"/>
非常简单——将对象的类型写成标记,将其属性写成特性。
本例中的红色是一个简单的SolidColorBrush,它很容易表示为一个特性。但是使用LinearGradientBrush要困难得多——这需要更多的XML。例如:
<Button Width="100">
<Button.Background>
<LinearGradientBrush>
<GradientStop …="" />
...
</LinearGradientBrush>
</Button.Background>
</Button>
在本例中,我们使用Xaml的属性元素语法,Background标记表明该标记的内容实际上是Background属性的一个值,在本例中是一个LinearGradientBrush。
这简单地展示了XamlWriter—Save方法获取对象并将它们转换为Xaml。基本的算法是将对象的类型名写入标记,然后将对象的属性值写入属性(如果它们是简单的属性)或属性元素标记下的嵌套标记。
顺便说一下,如果您已经对Xaml有过很多了解,您可能已经知道有时属性元素标记会被省略。例如,对于Grid,子属性是它的内容属性,因此:
<Grid>
<Grid.Children>
<Button />
<Button />
</Grid.Children>
</Grid>
可以简写成:
<Grid>
<Button />
<Button />
</Grid>
这是基本的Xaml语法(基于[ContentProperty]属性),但这里的重点是XamlWriter理解它,并在可能的情况下编写更简单的语法。
原文:https://www.cnblogs.com/TianPing/p/10387892.html