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.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
随机推荐
- libcurl用法
本文以向百度搜索开放平台搜索关键字所对应的推荐搜索条目为例子: url:http://m.baidu.com/su?wd=%s&action=opensearch&ie=utf-8 ( ...
- Luogu 4844 LJJ爱数数
LOJ 6482 设$d = gcd(a, b)$,$xd = a$,$yd = b$,因为$\frac{1}{a} + \frac{1}{b} = \frac{a + b}{ab} = \frac{ ...
- PHP+SOCKET 模拟HTTP请求
HTTP消息结构 客户端请求包括四部份:请求行(状态行).请求头.空行.请求主体(数据),如下图: 服务端响应包括四部份:响应行(状态行).响应头.空行.响应主体(数据),如图: HTTP请求方法: ...
- CodeBlocks调试功能(转)
转自:迂者-贺利坚 http://blog.csdn.net/sxhelijian/article/details/15026159 示例代码: #include <iostream> u ...
- yum 安装telnet
检测是否安装 rpm -qa |grep telnet 安装 yum install xinetd yum install telnet-server yum -y install telnet 再次 ...
- python2.7响应数据中unicode转中文
print ("响应结果:%s" % r.content.decode('unicode_escape')) 一. 在爬虫抓取网页信息时常需要将类似"\u4eba\u75 ...
- delphi 指针 认识
delphi 指针分为类型指针和无类型指针: 类型指针分为PChar.PInteger.PString等. 无类型指针Pointer. PPChar/PP...为指针的指针 @和Addr一样,为获取变 ...
- LeftStr函数使用
LeftStr(s, i); 表示返回字符串s的左边共I位字符的一个新字符串. var i: integer; s: string; result: string; begin i := ; s := ...
- 我用Django搭网站(2)-QQ登录
接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. 第一步:准备阶段 打开QQ互联,并登录你的QQ账号.再点击导航上的" ...
- wp7启动+幻灯片效果
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Wi ...