WPF_02_XAML
XAML(Extensible Application Markup Language的简写)是用于实例化.NET对象的标记语言。XAML对于WPF不是必须的。
XAML基础
XAML标准:
- XAML文档中的每个元素都映射为.NET类的一个实例。
- 与所有XML文档一样,可在一个元素中嵌套另一个元素。
- 可通过特性(attribute)设置每个类的属性(property)。
XAML名称空间
xmlns特性是XML中的一个特殊特性,专门用来声明名称空间。
- http://schemas.microsoft.com/winfx/2006/xaml/presentation 是WPF核心名称空间,包含所有WPF类。
- http://schemas.microsoft.com/winfx/2006/xaml/xaml 是XAML名称空间,包含各种XAML实用特性,这些特性可影响文档的解释方式。
标记扩展
如果将属性值设置为一个已经存在的对象,或者将一个属性绑定到另一个控件来动态地设置属性值,这些情况都需要使用标记扩展-非常规的方式设置属性的专门语法。
标记扩展可以用于嵌套标签或 XML 特性中,当用在特性中时总是被花括号{}包围起来。
<Button x:Name="btn" Foreground="{x:Static SystemColors.ActiveCaptionBrush}">
上面例子中,标记扩展是 StaticExtension 类(约定在引用扩展类时可以省略最后一个单词 Extension)。
所有标记扩展都继承自 System.Windows.Markup.MarkupExtension 。
附加属性
附加属性用于多个控件但在另一个类中定义的属性,在WPF中常用于控件布局。附加属性不是真正的属性,实际上被转换为方法调用。
<!--Grid.SetRow(txt,2)-->
<TextBox x:Name="txt" Grid.Row="2">
</TextBox>
附加属性时WPF的核心要素,充当通用的可扩展系统。如果选择将该属性作为基类的一部分,不仅会使公共接口变得十分杂乱,而且也不能添加需要新属性的新类型的容器。
嵌套元素
XAML让每个元素决定如何处理嵌套的元素。
- 如果父元素实现了 IList 接口,解析器将调用 IList.Add() 方法,并且为该方法传入子元素作为参数
- 如果父元素实现了 IDictionary 接口,解析器将调用 IDictionary.Add() 方法,并且为该方法传递子元素作为参数。当使用字典时还必须设置 x:Key 特性以便为每个条目指定键名。
- 如果父元素使用 ContentProperty 特性进行修饰,解析器将使用子元素设置对应的属性。
<LinearGradientBrush>
<LinearGriadientBrush.GradientStops>
<GridientStop Offset="0.00" Color="Red"/>
<GridientStop Offset="0.50" Color="Indigo"/>
<GridientStop Offset="1.00" Color="Violet"/>
</LinearGriadientBrush.GradientStops>
</LinearGradientBrush>
解析器知道 GradinetStops 属性返回一个 GradientStopCollection 对象而且实现了 IList 接口。因此,解析器使用 IList.Add() 方法将每个 GradientStop 对象添加到集合中。
所有继承自 ContentControl 类的控件只允许包含单一的嵌套元素。所有继承自 ItemsControl 类的控件允许包含一个条目集合。所有继承自 Panel 类的控件都是用来组织多组控件的容器。
特殊字符与空白
| 特殊字符 | 字符实体 |
|---|---|
| < | < |
| > | > |
| & | & |
| " | " |
我的公众号

WPF_02_XAML的更多相关文章
随机推荐
- 深入学习Composer原理(一)
Composer作为PHP的包管理工具,为PHPer们提供了丰富的类库,并且让PHP重焕新生,避免被时代淘汰的悲剧.可以说,Composer和PHP7是现在PHP开发者的标配,如果你还没用过Compo ...
- Mysql实现无插入有更新(不知主键的情况下)
网上很多资料说有两种方式 (必须现有唯一键) 1.INSERT 中ON DUPLICATE KEY UPDATE的使用 2.REPLACE的使用 通过可以得出结果: 如果a和b字段 能决定唯一 例子: ...
- 用tcping检查网站开放的端口
麦新杰之前分享过一款小巧玲珑工具软件:tcping,即在tcp层进行端口的ping. tcping可以用来检查和确认我们的网站有哪些端口是开放的,使用很顺手.比如麦新杰这几天在研究如何关闭mysql的 ...
- js判断访客来源网址和关键字
加入现在有A.B两个站,A为友站,B为我站. 希望判断使用从A站连来时,就把访问者拒绝在门外,只要用简单几行的javascript,就可抓到使用的来源,以及作出一些防范的措施. <script ...
- requestAnimationFrame 切换页面问题
requestAnimationFrame 切换页面时, 之前定时的内容还会继续执行. 所以 要注意处理动画函数内容,否则会出现死循环. 遇到的问题: 我在两个页面都有使用 requestAnimat ...
- 【C++ Primer Plus】编程练习答案——第5章
1 void ch5_1() { 2 using namespace std; 3 int small, big, sum{0}; 4 cout << "enter small ...
- JVM探针与字节码技术
JVM探针是自jdk1.5以来,由虚拟机提供的一套监控类加载器和符合虚拟机规范的代理接口,结合字节码指令能够让开发者实现无侵入的监控功能.如:监控生产环境中的函数调用情况或动态增加日志输出等等.虽然在 ...
- 安装Transformers与ValueError: Unable to create tensor, you should probably activate truncation and/or padding with 'padding=True' 'truncation=True' to have batched tensors with the same length.报错
此篇博客内容为短暂存留记录(项目使用过程还未记录),后续将会更新完整学习流程.. 1.根据官网上的链接安装有两种方式: (1)pip直接安装 pip install transformers # 安装 ...
- C++优化列表
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC ...
- suricata的模块和插槽
参考资料 suricata官方文档https://suricata.readthedocs.io/en/latest/performance/runmodes.html#different-runmo ...