XAML 属性元素,标记扩展和注释
这节来讲一下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 属性元素,标记扩展和注释的更多相关文章
- XAML语法及标记扩展、附加属性、特定的字符和空白
1.对象元素语法 使用开闭标签将对象定义一个XML元素,这种语法与其他标记语言如HTML的元素语法非常相似,在以左右尖括号保卫要设置的类或结构的类型名称.对象元素可以声明0个或多个属性,以一个或多个空 ...
- XAML实例教程系列 - 标记扩展(Markup Extensions) 六
XAML实例教程系列 - 标记扩展(Markup Extensions) 分类: Windows 8 Silverlight2012-06-21 13:00 1139人阅读 评论(0) 收藏 举报 扩 ...
- 标记扩展和 WPF XAML
本主题介绍 XAML 的标记扩展概念,包括其语法规则.用途以及底层的类对象模型. 标记扩展是 XAML 语言以及 XAML 服务的 .NET 实现的常规功能. 本主题专门详细论述了用于 WPF X ...
- [No000012C]WPF(4/7)类型转换器和标记扩展[译]
介绍 之前讨论了WPF的基础架构,然后逐步开始学习布局面板,转换,介绍了不同的控件,容器,UI转换等.在这篇文章中,我将讨论每个创建XAML应用前的开发人员应该了解的关于XAML最重要的东西. 标记扩 ...
- [No0000130]WPF 4.5使用标记扩展订阅事件
自从我上次写到关于标记扩展的时候已经有一段时间了...... Visual Studio 11 Developer Preview的发布给WPF带来了一些新功能,让我有理由再次使用它们.我要在这里讨论 ...
- WPF,Silverlight与XAML读书笔记(3) - 标记扩展
hystar的.Net世界 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 103 文章- 0 评论- 107 WPF,Silverlight与XAML读书笔记(3) - 标记扩展 说 ...
- Xamarin.Forms移动开发系列5 :XAML标记扩展
摘要 本文主要讲述Xamarin.Forms中XAML的标记扩展. 前言 在Xamarin.Forms移动开发系列4 :XAML基础一文中提到过XAML标记扩展,本文将对标记扩展进行更深入的了解. 大 ...
- wpf中xaml的类型转换器与标记扩展
原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...
- XAML(4) - 标记扩展
在为元素设置值时, 可以直接设置值, 但有时标记扩展非常有帮助.标记扩展包含花括号,其后是定义了标记扩展类型的字符串标志. 下面是一个Static Resource标记扩展: <Button N ...
随机推荐
- BeautifulSoup爬取微博热搜榜
获取url 设定请求头 requests发出get请求 实例化BeautifulSoup对象 BeautifulSoup提取数据 import requests 2 from bs4 import B ...
- gtk中构件添加背景图
在gtk中我们总想要去给构件添加背景图,具体函数代码如下 void chang_background(GtkWidget *widget, int w, int h, const gcha r *pa ...
- mysql连接不上本地服务器或者localhost:3306报错
今天初学MySQL数据库就遇到问题: 主要是本地服务器登录问题 workbench里双击那个connection出现的 解决方法: 1:看一看防火墙,这是最常见的,这种主要是防火墙限制了访问,可能是安 ...
- Java并发编程之并发关键字
volatile 保证可见性 一个线程修改volatile变量的值时,该变量的新值会立即刷新到主内存中,这个新值对其他线程来说是立即可见的 一个线程读取volatile变量的值时,该变量在本地内存中缓 ...
- P1223_排队接水(JAVA语言)
思路 根据短作业优先平均等待时间最短的常识(默默感叹一句操作系统没白学),将Ti从小到大排序后,计算平均等待时间输出 //水题 题目描述 有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请 ...
- canvas绘制图像轮廓效果
在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果. 发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...
- javascript常用方法封装
1,获取链接上的参数 getQueryString = (name, search) => { search = search || window.location.search.substr( ...
- [BFS]翻币问题
翻币问题 Description 有N个硬币(6<=N<=20000)全部正面朝上排成一排,每次将其中5个硬币翻过来放在原位置,直到最后全部硬币翻成反面朝上为止.试编程找出步数最少的翻法, ...
- mysql 批量操作,已存在则修改,不存在则insert,同时判断空选择性写入字段
注:如果是批量插入需要在 Java 连接数据库的字串中设置 &allowMultiQueries=true 针对单行数据有则修改无则新增 本案例的建表语句是: -- auto-generate ...
- Asp Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step
翻译自 Mohamad Lawand 2021年1月25日的文章 <Refresh JWT with Refresh Tokens in Asp Net Core 5 Rest API Step ...