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. /error处理

    1 BasicErrorController 1.1 简述 SpringMVC框架在出现错误时有一个默认的错误请求 /error:出现异常之后执行/error请求之前框架会判断出现异常的请求类型,然后 ...

  2. TOP命令 详解CPU 查看多个核心的利用率按1

    top命令是linux下常用的工具,可以查看各个进程的CPU使用情况.先看一个实例: 这是Ramnode双核VPS的top显示结果: 左上角可以看到CPU的使用率是11.3%,但是看下面的进程,plu ...

  3. web 应用中访问 Spring 具体实现

    user=LF password=LF jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl driverClass=oracle.jdbc.driver.Ora ...

  4. 【转】浏览器中F5和CTRL F5的行为区别

    原文地址:http://www.cnblogs.com/jiji262/p/3410518.html 前言 在印象中,浏览器中的F5和刷新按钮是一样的效果,都是对当前页面进行刷新:Ctrl-F5的行为 ...

  5. Linux 编译内核

    编译内核步骤: 1.先查看自己OS使用的内核版本 mrzhang@mrzhang:~$ uname -r4.4.0-51-genericmrzhang@mrzhang:~$ 2.如果安装系统时,自动安 ...

  6. 1.scala基础语法总结

    Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...

  7. 487C Prefix Product Sequence

    传送门 题目大意 分析 因为n为质数所以i-1的逆元唯一 因此ai唯一 代码 #include<iostream> #include<cstdio> #include<c ...

  8. pyinstaller生成exe可执行程序

    1安装 略 2执行 pyinstaller –F test.py 报错: Pyinstaller: cx_Oracle.InterfaceError: Unable to acquire Oracle ...

  9. c++模板实现 linq

    // ConsoleApplication32.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" using namespace std; # ...

  10. Oracle——单行函数

    两种 SQL 函数 单行函数 字符函数 大小写控制函数 SELECT employee_id, last_name, department_id FROM employees WHERE last_n ...