XMAL基础
XMAL基础(WPF编程宝典)
XAML基础规则
- XAML文档中的每个元素都映射为.Net类的一个实例。元素名称也完全对应于类名。例如:元素<Button>指示WPF创建Button对象
- 可在一个元素中嵌套另一个元素,嵌套是一个包含的方法
- 可通过特性(attribute)设置每个类的属性(property) (属性针对对象,特性针对编程语言)

文档包含两个元素:Windos和Grid
Windos元素代表整个窗口,Grid元素可以放置所有控件
WPF应用中只使用Window,Page(用于可导航的应用程序),Application(定义应用程序资源和启动设置)作为顶级元素,其顶级元素只有一个。
该图还包含几个特性:类名和xmlns名称空间

一个属性

XAML名称空间
XAML解析器还需要知道哪个类位于哪个.Net名称空间,比如很多名称空间都有Window类

xmlns特性专门来声明名称空间
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
以上是WPF核心名称空间,它包含所有的WPF类,包括用来构建用户界面的控件,没有声明前缀,所有它成为整个文档的默认命名空间
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
它包含各种XAML实用特性,这些特性可能影响文档的解释方法。名称空间被映射为前缀x,这意味着可通过在元素名称之前放置名称空间前缀x来实用该名称空间<x:ElementName>
- 这些看起来像URL的名称空间,主要是让使用者不会无意使用相同的名称空间
- XAML的名称空间和.Net不是一一对应的,如果一一对应会增加XAML文档复杂度。
代码隐藏类
为了使应用程序具有一定的功能,就需要连接包含程序的事件处理程序的方法

在Class特性前面放置了名称空间x,这意味着这是XAML语言中更通用的部分,Class特性告诉XAML解析器用指定的名称生成一个新类,这句话说创建了一个Window1的新类
可以提供Window1的部分类,该部分类与自动生成的那部分合并在一起


InitializeComponent()
该函数的工作是调用System.Windows.Application类的LoadComponent()方法,LoadComponent()方法从程序集提取BAML(编译过的XAML),并用它来构建用户界面。解析BAML时,它会创建每个空间对象,设置其属性,并关联所有事件来处理程序
命名元素
在代码隐藏类中,希望通过代码来操作控件,为了达到目的,控件必须包含XAML Name特性

Name告诉XAML解析器把以下字段添加到window1类自动生成部分

这样就能使用grid1在代码中使用了
许多类有自己的Name,XAML解析器使用了一种更聪明的方法,使用X:前缀,也可以通过设置实际元素的Name属性

当包含Name属性的类使用RuntimeProper特性修饰之后,这才是可行的,RuntimeProper特性指示哪个属性的值将作为该类型的实例名称(通常是Name属性)
XAML中的属性和事件


以上具体的TextBox代码为:

简单介绍一下包括的两个属性:枚举类型:

字符串类型:

整型:

一个Brush对象

类型转化器
为了关联字符串和非字符串属性
- 检查属性声明,查找TypeConverter特性(如果提供了TypeConverter特性,Foreground)
- 如果没有,XAML解析器将检查对应数据类型的类声明,比如Brush对象有个TypeConverter(typeof(BrushConverter))特性声明进行修饰,所以Brush类及其子类使用了BrushConverter类型转化器
如果什么都没有,直接报错。
复杂属性
创建类型转化器可能十分复杂,提供另一种选择:属性元素语法,名称形式为Parent.PropertyName的子元素
比如:

标记扩展
希望将属性值设置为一个已经存在的对象,或者可能希望通过将一个属性绑定到另一个空间来动态地设置属性值,标记扩展使用{标记扩展类 参数}

以上的代码,标记扩展类:StaticExtension类,x前缀指示在XAML名称空间中查找StaticExtension类,当然有些不需要。

附加属性
当在容器中放置控件时,根据容器的类型控件会获得额外特征,附加属性包含两个部分的命名形式:定义类型.属性名

附加属性根本不是根本的属性,实际上被转化为方法调用:DefiningType.SetPropertName()
调用SetPropertName()方法时,解析器传递两个参数:被修改的对象以及指定的属性值
设置Grid.Row属性时:

嵌套元素
XAML让每个元素决定如何处理嵌套元素,采用三种处理机制:

比如:

因为一个句点,所有XAML知道
是复杂属性,于是实现为:

有些属性可支持多种类型的集合,在这种情况下,需要添加一个标签来指定集合类



事件
用于关联事件处理程序的语法为:事件名=“事件处理程序方法名”

使用其他名称空间中的类型

Prefix是希望在XAML在XAML标记中用于指示名称空间的XML前缀
Namespace是声明类型的程序集
AssemblyName是声明类型的程序集


sys和local前缀通常在导入System名称空间和当前项目的名称空间时使用
XMAL基础的更多相关文章
- wpf xmal基础
1.名称空间的引用 比如想使用System.Windows.Controls名称空间 首先需要把改名称空间所在的程序集presentationFramework.dll引用到项目里 然后在根元素的起始 ...
- WPF入门教程系列一——基础
一. 前言 最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料.为了温故而知新把学习过程记录下来,以备后查.这篇主要讲WPF的开发基础,介绍了如何使用V ...
- WPF基础学习笔记整理 (二) XAML
基础知识: XAML:Extensible Application Markup Language, zammel: 用于实例化.NET对象的标记语言: XMAL使用树形逻辑结构描述UI: BAML: ...
- WPF基础学习笔记整理 (一)
基础知识: WPF:Windows Presentation Foundation,用于Windows的现代图形显示系统: WPF用于编写应用程序的表示层: 引入“内置硬件加速”和“分辨率无关”: S ...
- WPF动画基础及实例
1.介绍 在之前做winform中, 也做过一些动画效果, 但是整个动画都需要我们自己去编写, 利用计时器或线程去直接操作UI元素的属性, 然而在WPF中, 则是通过一种全新的基于属性的动画系统, 改 ...
- UWP入门(二) -- 基础笔记
原文:UWP入门(二) -- 基础笔记 不错的UWP入门视频,1092417123,欢迎交流 UWP-04 - What i XMAL? XAML - XML Syntax(语法) ,create i ...
- Xamarin.Forms移动开发系列4 :XAML基础
摘要 本文介绍Xamarin.Forms创建用户界面的语言:XAML基础部分. 前言 本文介绍Xamarin.Forms定义用户界面的语言:XAML. 本篇篇幅较长,主要讲述XAML语法,以及对其他基 ...
- WPF入门教程(一)---基础
这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2013创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言.例如C#. 2) 会一 ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
随机推荐
- SQL CLR学习
SQL CLR (SQL Common Language Runtime) 是自 SQL Server 2005 才出现的新功能,它将.NET Framework中的CLR服务注入到 SQL Serv ...
- CSS3 grayscale滤镜图片变黑白
1. 使整个页面的图片都变成灰色的,代码如下. html{ font-size: 100%; -webkit-text-size-adjust: none; -ms-text-s ...
- Oracle的列操作(增加列,修改列,删除列),包括操作多列
增加一列: alter table emp4 add test varchar2(10); 修改一列: alter table emp4 modify test varchar2(20); 删除一列: ...
- 【转】SSH指南
OpenSSH OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现.它用安全.加密的网络连接工具代替了 telnet.ftp. rlogin.rsh 和 rcp 工具.Ope ...
- QuotedStr函数
今天学到一个新函数,很有用 QuotedStr(s);// 在s两边加单引号, 这样就不会看着n多的单引号糊涂了...
- jQuery插件扩展extend的实现原理
相信每位前端的小伙伴对jQuery都不陌生吧,它最大的魅力之一就是有大量的插件,去帮助我们更轻松的实现各种功能. 前几天晚上,闲来无事,就自己动手写了个简单的jQuery插件,功能很简单,只是让选定的 ...
- System.Net.Http
System.Net.Http DotNet菜园 占个位置^-^ 2018-11-10 09:55:00修改 这个HttpClient的学习笔记一直迟迟未记录,只引用了其他博主的博客链接占个位置,但被 ...
- C# 微信openid 用户信息
前段demo index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- SMS106 短信验证码接口测试
SMS106 短信验证码接口测试 一.什么是SMS106: 106短信通道是指仅中国移动.中国联通提供的网关短信平台,实现与客户指定号码进行短信批量发送和自定义发送的目的,即你收到的短信在手机上以1 ...
- Xamarin 笔记
1. 报类 $(_DeviceSdkVersion) >= 21 异常,提示部署失败 解决办法:升级 xamarin for visual studio 2. 新建项目时,报“程序包安装错误”: ...