这节来讲一下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>

效果如下:

在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按钮的值也会变,程序运行如下:

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

注释

最后讲一下xaml中的注释。

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

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

    2.不能注释标签的属性

    3.不能嵌套使用注释

本节到此结束...

最新文章

  1. Devrama Slider - 支持任意 HTML 的内容滑块
  2. 利用webview实现在andorid中嵌入swf
  3. Spark Streaming
  4. OpenStack 的NAT解决办法
  5. CPU信息查询
  6. SAS使用SPD引擎并报Encoding错误
  7. PageRank与社交网络模型评估
  8. Unity 物体围绕圆周运动
  9. BGP拓扑正确配置
  10. 关于html转换为pdf案例的一些测试与思考
  11. nginx反向代理node.js获取客户端IP
  12. 相似度度量:欧氏距离与余弦相似度(Similarity Measurement Euclidean Distance Cosine Similarity)
  13. linux windows 格式化一块大于2 TiB硬盘
  14. week7
  15. jquery转换json对象为字符串
  16. Kubernetes学习之路目录
  17. 解决ubuntu上网慢的方法
  18. JS性能细节学习初步总结
  19. UI基础:UIScrollView、UIPageControl
  20. 静态构造器(static constructor)

热门文章

  1. IT培训有哪些坑(一)?
  2. RabbitMQ 入门 (Go) - 7. 数据持久化(下)【完】
  3. [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.5 状态空间平均 7.6 本章小结
  4. 整合一套高性能网关Kong
  5. 让你的Windows/Linux玩上Switch!
  6. Docker下MySQL的安装
  7. 6. VUE 指令-概述
  8. .netcore 写快递100的快递物流信息查询接口
  9. matlab文件管理
  10. matlab数值类型