XamlWriter-将对象树写入Xaml

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理解它,并在可能的情况下编写更简单的语法。

猜你喜欢

转载自www.cnblogs.com/TianPing/p/10387892.html