《深入浅出WPF》学习笔记之系统学习XAML语法

XAML是WPF技术中专门用于设计UI的语言,设计师直接使用XAML设计界面,设计完成后输出XAML代码交给程序员直接使用。

XAML是一种由XML派生而来的语言,所以会继承XML中的一些概念。

命名空间:

命名空间为避免标签的名称冲突而出现,可以把来自不同程序集中的类映射到自定义的命名空间前缀,使用语法xmlns[:可选的映射前缀]="名称空间和程序集"。没有映射前缀的命名空间为默认命名空间,默认命名空间只能有一个。命名空间映射一般写在根标签上。

标签与运行时对象的关系:

在XAML中的每个标签对应运行时中的一个对象,标签的包含关系也对应运行时中对象的包含关系。大多数标签的属性(Attribute)对应运行时对象的属性(Property)。

x:Class属性(Attribute):

这个属性(Attribute)并不对应到运行时对象的属性(Property),Class属性用来说明XAML编译成C#代码后对应的类名,如果手动把该属性改成其他后台代码中不包含的类名称,编译后会自动生成该类。如果与后台代码的类名称相同则进行合并(后台代码中的类要用partial修饰)。

XAML的树形结构:

每个XAML都是一个树,有唯一的一个根节点,通常为Window或Page。这种树形结构对整个WPF系统意义重大,包括属性系统、数据绑定、事件路由都依赖于这棵树。类库中提供VisualTreeHelper和LogicTreeHelper两个帮助类用来查找或操作树。

XAML对象属性赋值语法:

使用标签的Attribute语法通过字符串为对象属性进行简单赋值。如果系统中没有内置的转换时需要使用TypeConverter类将标签的Attribute与对象的Property进行映射。创建继承自TypeConverter的类并重写ConvertFrom方法并在需要应用该转换的类上应用TypeConverterAttribute属性。

属性元素语法,如果复杂属性无法通过简单字符串赋值时,可以通过使用属性元素语法为属性赋值。下面为属性元素语法的一个示例,为Rectangle的Fill属性赋值

        <Rectangle>
            <Rectangle.Fill>
                <LinearGradientBrush></LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>

如果要赋值的属性为元素的默认内容,则可以省略“元素名称.属性名称”这个标签。

标记扩展:

标记扩展是一种特殊的Attribute=value语法,当需要为属性进行特殊类型的赋值时就需要使用标记扩展语法(如数据绑定或赋NULL值)。标记扩展语法:{Binding ElementName=Name1,Path=Value,Model=OneWay},对象的数据类型为紧邻左侧花括号的字符串,对象的属性初始化为以逗号分隔的键值对字符串,值不需要使用引号。标记扩展是为属性赋值,完全可以使用属性元素的语法代替标记扩展为属性赋值。标记扩展可以使用一些简化的语法,在类型名称后可以直接跟属性名而不用写属性值(不用写键值对的形式),这会直接调用类型的包含参数的构造函数,属性值的前后顺序与构造函数相同,如{Binding Name1 ,Path=Value,Model=OneWay}。并不是所有的对象都支持标记扩展语法,只有从MarkupExtension派生的类才能使用标记扩展语法来创建对象。
注意:标记扩展是可以嵌套的,并且标记扩展类均已Extension作为后缀,在XAML使用时可以省略。

事件:

除了使用Attribute语法给对象属性赋值外,还可以为对象(控件)关联事件。通过将事件处理函数的名称放到Attribute的值字符串中为事件指定处理器。

x:Code:

该标签可以将C#后置代码写到XAML文件中,代码内容一定要用xml语言的<![CDATA[]]转译,如

<x:Code>
          <![CDATA[
         private void Page_Loaded(object sender, RoutedEventArgs e)
        {

        }
             ]]>
 </x:Code>

引入程序集命名空间:

首先需要把程序集引入到项目中,然后使用xmlns语法,引用程序集中的类时,使用<映射名称:类名称></映射名称:类名称>语法引用。

注释:

语法<!---->,注释不能嵌套,并且只能出现在开始标签和结束标签之间。

时间: 2024-10-13 21:59:14

《深入浅出WPF》学习笔记之系统学习XAML语法的相关文章

Symfony2 学习笔记之系统路由

mfony2 学习笔记之系统路由 漂亮的URL绝对是一个严肃的web应用程序必须做到的,这种方式使index.php?article_id=57这类的丑陋URL被隐藏,由更受欢迎的像 /read/intro-to-symfony 来替代. 拥有灵活性更为重要,如果你要改变一个页面的URL,比如从/blog 到 /new 怎么办?有多少链接需要你找出来并更新呢? 如果你使用Symfony的router,这种改变将变得很简单. Symfony2 router让你定义更具创造力的URL,你可以map你

《深入浅出WPF》笔记——绘画与动画

<深入浅出WPF>笔记——绘画与动画 本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一下学习的过程.在本记录中,为了更好的理解绘画与动画,多数的例子还是在VS里面敲出来的.好了,不废话了,现在开始. 一.WPF绘画 1.1基本图形 在WPF中可以绘制矢量图,不会随窗口或图型的放大或缩小出现锯齿或变形,除此之外,XAML绘制出来的图有个好处就是便于修改,当图不符合要求的时间,通常改某些属性就可以完成

[Linux] 学习笔记之安装学习环境(sshd, lrzsz)

紧接前一篇,在VMWare安装完Linux,这个时候我们要使用远程工具连接到虚拟机上去了,以前一直使用Putty,后来到新公司之后,推荐使用SecureCRT,使用之后,觉得效果不错,但是每次连接都失败,linux新手伤不起,在网上搜啊搜,终于找到解决办法.   搜索了很多资料之后,发现是由于我未在Linux上安装ssh服务导致无法使用SecureCRT连接. 1. 可以使用ssh localhost对此进行测试,具体使用如下: 2. 使用apt-get或者yum安装ssh服务,具体哪种操作系统

[学习笔记] Sencha Cmd 学习笔记 Sencha Cmd是什么

本文地址: http://blog.csdn.net/sushengmiyan/article/details/38295575 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站: http://w

Accelerated C++学习笔记1—&lt;开始学习C++&gt;

第0章 开始学习C++ 1.每次学习一个新的语言,大家都是从Hello, world!开始 // lesson0_1.cpp : 定义控制台应用程序的入口点. //功能:编译并运行Hello,world //时间:2014.5.7 #include "stdafx.h" #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { std::cout<< &

iOS学习笔记---c语言学习第七天

结构体 结构体是一种自定义的数据类型 struct 结构体名 { 类型说明符  成员名: … 类型说明符  成员名: }: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { struct teacher{ char name[30]; char sex; int age; char course[30]; }; typedef struct teacher Teacher; Teacher c

树莓派学习笔记——GPIO功能学习

树莓派学习笔记——GPIO功能学习

【web开发学习笔记】Struts-Tags学习笔记1 - 通用标签和控制标签

通用标签和控制标签 第一部分:代码 //前端 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> 访问属性 <a href="<%=contextP

VBA学习笔记之VBA学习思路

进阶的知识点 1. SQL查询语句和ADO2. 正则表达式和网抓3. 窗体与控件4. API 类模块 等等 作者:SOROSay链接:https://www.zhihu.com/question/26078625/answer/132542043来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1小时 熟悉数据类型.变量.常量和运算符 1.了解VBA有哪些数据类型 2.知道如何定义变量,了解public/dim/private定义变量时的区别 3.知道如何定义常量