这节来讲一下XAML中的属性元素,标记扩展,和注释。

属性元素

    一般的,我们想要对一个标签的属性赋值,可以直接在标签内部键入属性名给其赋值,如我们给button的Content属性赋值:

<Button Content="I am Button" />

    或者我们在后台通过标签的Name找到这个标签,用代码为其赋值。

    属性元素则是为标签属性赋值的第三种方法。

    顾名思义,属性元素是以元素的形式来表达一个标签的属性,它的语法如下:

<tag>
    <tag.property>
         value
     </tag.property>
</tag>

    上方给button的Content赋值的代码就可以改为以下形式:

<Button>
  <Button.Content>
      I am button
  </Button.Content>
</Button>

    我们前几节讲到,标签有非空和空标签之分,非空标签是可以有自己的内容的标签,所以我们为标签的内容赋值时,是可以省略属性元素的,以上代码就可以简化为:

<Button> I am button</Button>

    系统会默认将“I am button” 赋值给Content,只有内容可以这么做,其它的属性若要使用属性元素赋值都是需要显示声明的。

    你可能会疑问,属性标签看起来让我们的代码变得复杂了,当然,如果给元素的属性赋一些简单的值,我们不需要用属性元素,就像宽,高这样的属性,我们直接在元素内部赋值要简单的多,但是当我们遇到一些复杂的赋值情况,属性元素的优势就显示出来了,再拿button距离,我想让button的内容是一个图标加文字,这时候,显然在属性内部直接赋值是无法做到了,我们要么在后台使用代码,要么就需要用属性元素了,请看实例:

<Button>
    <WrapPanel>
        <materialDesign:PackIcon
            Width="16"
            Height="16"
            Margin="0 0 5 0"
            VerticalAlignment="Center"
            Foreground="White"
            Kind="Logout" />
        <TextBlock TextWrapping="Wrap" Text="退出登录" FontSize="15" VerticalAlignment="Center" />
    </WrapPanel>
</Button>

    效果如下:

XAML 属性元素,标记扩展和注释-LMLPHP

    在button内部放了一个WrapPanel元素,在这种情况下,属性元素是最简单合适的,毕竟C#代码是用来写逻辑的,不应过多涉及UI的编写。

标记扩展

    标记扩展是xmal最特色的一个东西,它同样是给属性赋值的一种形式,但是标记扩展正如它的名字一样,是对属性赋值的扩展,它是我们后续要讲的MVVM模式中控件和数据的桥梁。

    标记扩展是由大括号括起来的一些内容组成的,请看下面的代码:

<TextBlock x:Name="text_show" Text="你好"/>
<Button Width="50" Height="30" Content="{Binding Text,Source={x:Reference text_show}}"></Button>

  

    上述代码中{Binding Text,Source={x:Reference text_show}}就是标记扩展,它使用Binding命令和Source命令将button的内容跟TextBlock的Text属性绑定了起来。当我们更改TextBlock的Text属性的值的时候,Button按钮的值也会变,程序运行如下:

XAML 属性元素,标记扩展和注释-LMLPHP

    后续的MVVM章节,我们会讲控件的值与VM页面中的属性绑定,就是依赖标记扩展这个语法。当我们改变VM属性值时,前台的控件值就会变,这就是WPF与众不同的地方:数据驱动控件。初学者,可以先做了解,后续我们会持续接触标记扩展,而且也只有在代码中才能更好的理解标记扩展的强大。

注释

    最后讲一下xaml中的注释。

    使用<!-- 注释内容 --> 来注释一段xaml代码,但是需要注意一下几点:

    1.注释只能出现在开始标签和结束标签之间,也就是只能出现在内容区域

    2.不能注释标签的属性

    3.不能嵌套使用注释

本节到此结束...

05-19 09:22