XMAL基础

XMAL基础(WPF编程宝典)

XAML基础规则

  1. XAML文档中的每个元素都映射为.Net类的一个实例。元素名称也完全对应于类名。例如:元素<Button>指示WPF创建Button对象
  2. 可在一个元素中嵌套另一个元素,嵌套是一个包含的方法
  3. 可通过特性(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>

  1.  这些看起来像URL的名称空间,主要是让使用者不会无意使用相同的名称空间
  2. 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对象

类型转化器

为了关联字符串和非字符串属性

  1. 检查属性声明,查找TypeConverter特性(如果提供了TypeConverter特性,Foreground)
  2. 如果没有,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名称空间和当前项目的名称空间时使用

原文地址:https://www.cnblogs.com/yinghualuowu/p/9396319.html