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名称空间和当前项目的名称空间时使用

XMAL基础的更多相关文章

  1. wpf xmal基础

    1.名称空间的引用 比如想使用System.Windows.Controls名称空间 首先需要把改名称空间所在的程序集presentationFramework.dll引用到项目里 然后在根元素的起始 ...

  2. WPF入门教程系列一——基础

    一. 前言   最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料.为了温故而知新把学习过程记录下来,以备后查.这篇主要讲WPF的开发基础,介绍了如何使用V ...

  3. WPF基础学习笔记整理 (二) XAML

    基础知识: XAML:Extensible Application Markup Language, zammel: 用于实例化.NET对象的标记语言: XMAL使用树形逻辑结构描述UI: BAML: ...

  4. WPF基础学习笔记整理 (一)

    基础知识: WPF:Windows Presentation Foundation,用于Windows的现代图形显示系统: WPF用于编写应用程序的表示层: 引入“内置硬件加速”和“分辨率无关”: S ...

  5. WPF动画基础及实例

    1.介绍 在之前做winform中, 也做过一些动画效果, 但是整个动画都需要我们自己去编写, 利用计时器或线程去直接操作UI元素的属性, 然而在WPF中, 则是通过一种全新的基于属性的动画系统, 改 ...

  6. UWP入门(二) -- 基础笔记

    原文:UWP入门(二) -- 基础笔记 不错的UWP入门视频,1092417123,欢迎交流 UWP-04 - What i XMAL? XAML - XML Syntax(语法) ,create i ...

  7. Xamarin.Forms移动开发系列4 :XAML基础

    摘要 本文介绍Xamarin.Forms创建用户界面的语言:XAML基础部分. 前言 本文介绍Xamarin.Forms定义用户界面的语言:XAML. 本篇篇幅较长,主要讲述XAML语法,以及对其他基 ...

  8. WPF入门教程(一)---基础

    这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2013创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言.例如C#. 2) 会一 ...

  9. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

随机推荐

  1. boost 错误报告

    #include <Windows.h> #include <boost/asio.hpp> 编译器会报错,fatal error C1189: #error :  WinSo ...

  2. Entity Framework 6.0 Tutorials(3):Code-based Configuration

    Code-based Configuration: Entity Framework 6 has introduced code based configuration. Now, you can c ...

  3. Web Pages version 2兼容 Web Pages version 1的设置

    If you want to run a site using Web Pages version 1 (instead of the default, as in the previous poin ...

  4. 应用Bundle捆绑压缩技术

    从MVC4开始,我们就发现,项目中对Global.asax进行了优化,将原来在MVC3中使用的代码移到了[App_Start]文件夹下,而Global.asax只负责初始化.其中的BundleConf ...

  5. wpf附加属性理解

    WPF附加属性 http://www.cnblogs.com/tianyou/archive/2012/12/27/2835670.html WPF属性(二)附加属性 http://blog.csdn ...

  6. EBS登陆界面个性化

    把完整资料贴出来 Set the profile option Local Login Mask (FND_SSO_LOCAL_LOGIN_MASK). (This profile option is ...

  7. javaScript入门之常用事件

    JS中的常用事件 onfocus/onblur:聚焦离焦事件,用于表单校验的时候比较合适. onclick/ondblclick:鼠标单击和双击事件 onkeydown/onkeypress:搜索引擎 ...

  8. Tensorflow报错:InvalidArgumentError: You must feed a value for placeholder tensor 'input_y' with dtype

    此错误神奇之处是每次第一次运行不会报错,第二次.第三次第四次....就都报错了.关掉重启,又不报错了,运行完再运行一次立马报错!搞笑! 折磨了我半天,终于被我给解决了! 问题解决来源于这边博客:htt ...

  9. ASPxGridView编辑时弹出的editform值不是当前行值的原因

    如下图所示(左边是红框是ASPxGridView编辑的行,右边是弹出的editform上显示的值). 这是因为ASPxGridView的KeyFieldName的值不是唯一的,需要修改或增加条件使键值 ...

  10. BZOJ2668:[CQOI2012]交换棋子(费用流)

    题目描述 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列的格子只能参与mi,j次交换. 输入输出格式 输入格式: 第一行 ...