这节来讲一下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.不能嵌套使用注释

本节到此结束...

XAML 属性元素,标记扩展和注释的更多相关文章

  1. XAML语法及标记扩展、附加属性、特定的字符和空白

    1.对象元素语法 使用开闭标签将对象定义一个XML元素,这种语法与其他标记语言如HTML的元素语法非常相似,在以左右尖括号保卫要设置的类或结构的类型名称.对象元素可以声明0个或多个属性,以一个或多个空 ...

  2. XAML实例教程系列 - 标记扩展(Markup Extensions) 六

    XAML实例教程系列 - 标记扩展(Markup Extensions) 分类: Windows 8 Silverlight2012-06-21 13:00 1139人阅读 评论(0) 收藏 举报 扩 ...

  3. 标记扩展和 WPF XAML

      本主题介绍 XAML 的标记扩展概念,包括其语法规则.用途以及底层的类对象模型. 标记扩展是 XAML 语言以及 XAML 服务的 .NET 实现的常规功能. 本主题专门详细论述了用于 WPF X ...

  4. [No000012C]WPF(4/7)类型转换器和标记扩展[译]

    介绍 之前讨论了WPF的基础架构,然后逐步开始学习布局面板,转换,介绍了不同的控件,容器,UI转换等.在这篇文章中,我将讨论每个创建XAML应用前的开发人员应该了解的关于XAML最重要的东西. 标记扩 ...

  5. [No0000130]WPF 4.5使用标记扩展订阅事件

    自从我上次写到关于标记扩展的时候已经有一段时间了...... Visual Studio 11 Developer Preview的发布给WPF带来了一些新功能,让我有理由再次使用它们.我要在这里讨论 ...

  6. WPF,Silverlight与XAML读书笔记(3) - 标记扩展

    hystar的.Net世界 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 103  文章- 0  评论- 107  WPF,Silverlight与XAML读书笔记(3) - 标记扩展   说 ...

  7. Xamarin.Forms移动开发系列5 :XAML标记扩展

    摘要 本文主要讲述Xamarin.Forms中XAML的标记扩展. 前言 在Xamarin.Forms移动开发系列4 :XAML基础一文中提到过XAML标记扩展,本文将对标记扩展进行更深入的了解. 大 ...

  8. wpf中xaml的类型转换器与标记扩展

    原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...

  9. XAML(4) - 标记扩展

    在为元素设置值时, 可以直接设置值, 但有时标记扩展非常有帮助.标记扩展包含花括号,其后是定义了标记扩展类型的字符串标志. 下面是一个Static Resource标记扩展: <Button N ...

随机推荐

  1. Blind Super-Resolution Kernel Estimation using an Internal-GAN 论文解读

    背景与思路来源 目前 SR 模型中合成 LR 使用的模糊核问题 目前大多数 SR 的 model 都是用的合成下采样图片来进行训练的,而这些合成的图片常常使用的是 MATLAB 里面的 imresiz ...

  2. Git本地仓库基本操作-1

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  3. 推荐一款全能测试开发神器:Mockoon!1分钟快速上手!

    1. 说一下背景 在日常开发或者测试工作中,经常会因为下游服务不可用或者不稳定时,通过工具或者技术手段去模拟一个HTTP Server,或者模拟所需要的接口数据. 这个时候,很多人脑海里,都会想到可以 ...

  4. rpm 命令介绍

    1. rpm 命令常用选项说明 1.1 功能模式选项 命令 解释 -i --install 安装软件,例:rpm -ivh tree-1.6.0-10.el7.x86_64.rpm -U --upgr ...

  5. jQuery核心函数和静态方法

    jQuery核心函数 从jQuery文档中可以看出,jQuery核心函数一共3大类4小类 jQuery(callback) 当DOM加载完成后执行传入的回调函数 <script> $(fu ...

  6. Qt信号槽源码剖析(一)

    大家好,我是IT文艺男,来自一线大厂的一线程序员 大家在使用Qt开发程序时,都知道怎么使用Qt的信号槽,但是Qt信号槽是怎么工作的? 大部分人仍然不知道:也就是说大家只知道怎么使用,却不知道基于什么原 ...

  7. 【Python学习笔记】-虚拟环境virtualenv

    在开发python应用程序的时候,系统安装的python3只有一个版本:3.4.所有的第三方的包都回被pip安装到python3的site-packages目录下. 如果我们要要同时开发多个应用程序, ...

  8. MRCTF My secret

    My secret 知识点:wireshark基本操作,shadowsocks3.0源码利用,拼图(os脚本编写能力), 根据这里的信息可以知道,tcp所传输的源数据是在target address后 ...

  9. Dynamics CRM各个版本的元数据浏览解决方案

    https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/browse-your-me ...

  10. Leedcode算法专题训练(数组与矩阵)

    1. 把数组中的 0 移到末尾 283. Move Zeroes (Easy) Leetcode / 力扣 class Solution { public void moveZeroes(int[] ...