掌握了C#和C++的程序员学习WPF的时候,首先遇到的麻烦就是XAML(实际上,很长一段时间以后,我发现XAML还是软肋)。

XAML语言和传统的C#和C++编程语言完全不同,这种不同是根植于两种语言的基础的,特别是在C++程序员看来,每次看到那一大串<>就有点晕;另外,XAML语言有一个很麻烦的地方,那就是容易看懂,但是很难记住,对于初学者来说,很多东西几乎就是直接机械记忆,比如点击按钮的响应函数要用这样的形式来写<Button Click="button_click1"/>,而button_click1函数则是放在了XAML对应的cs文件中。上帝保佑,M$一向擅长的用户体验帮了大忙,丰富的输入提示大大减轻了程序员的记忆负担。不过,很多内容还是需要你“见多识广”,换句话说,没办法一口吃个胖子,很多内容在于积累。

闲言少叙,回到XAML语言中,今天就简单记录一下最基础的部分:XAML中的标记扩展,事件处理器,命名空间,注释。

1.标记扩展

简单而言就是用“{}”来封装一堆属性的赋值。比如

<TextBox Text="{Binding ElementName=slider1, Path=Value, Mode=OneWay}" Margin="5">

相当于

<TextBox Margin="5">

  <TextBox.Text>

    <Binding ElementName="slider1" Path="Value" Mode="OneWay"/>

  </TextBox.Text>

</TextBox>

请注意:在{}中赋值没有"",编译器会把{}中的内容直接解析成相应的对象,对象的数据类型名是紧邻左{的字符串。

标记语言可以嵌套,例如Text=“{Binding Source={StaticResource myDataSource}, Path=PersonName}”;标记语言有一些让新入门的使用者头痛的简写语法,比如“{Binding Value, ……}”和“{Binding Path=Value, ……}”是等价的,“{StaticResource myString}”和“{StaticResource ResourceKey=myString,……}”是等价的,前者叫做“固定位置参数(Positional Parameter)”,后者成为“具名参数(Named Parameters)”,固定位置参数实际上就是标记扩展类构造器的参数,其位置由构造器参数列表决定;标记扩展类的类名均以Extension为后缀,在XAML中使用的时候一般都省略不写,比如Text="{x:Static……}"就等价于Text=“{x:StaticExtension……}”(这个也就是知道就行了,谁没事还特地加上Extension?)。

个人认为标记语言写起来很简洁,理解起来很麻烦,使用起来必须“熟能生巧”,换言之,记住就好了。

2.事件处理器

.NET事件处理机制里面,如果要处理指定对象的事件,可以为对象的某个事件指定一个能与该事件匹配的成员函数,这个函数就被称为“事件处理器”(Event Handler)。WPF支持同样的时间处理机制,允许使用XAML语言指定对象事件的处理函数,简单而言,就是形如<ClassName EventName="EventHandleName">,其中EventName就是对象ClassName的“事件性属性”,当我们为“事件性属性”赋值的时候,XAML编辑器就会自动为我们生成相应的事件处理器(也就是一个C#写的函数)。一个典型的应用就是button的click事件,形如<Button x:Name="button1" Click="button1_Click" />,Visual Studio .NET编辑器有很棒的辅助功能,能够自动生成对应的函数的定义,该函数(本例中是名为button1_click的函数)会自动出现在XAML文件对应的.cs文件中,形如

private void button1_Click(object sender, RoutedEventArgs e)

{

}

这样就生成了一个事件处理器了,在这个方法里面添加你的代码响应对应的事件吧。

除了在.cs中生成对应的C#代码,也可以把C#代码搬到xaml文件中,使用x:Code标签和<![CDATA[……]]>即可,比如上面的例子就可以改写如下:

<x:Code>

  <![CDATA[

        private void button1_Click(object sender, RoutedEventArgs e)

        {

        }

  ]]>

</x:Code>

3.命名空间

熟悉C#的估计没有不知道这个的吧?XAML也有命名空间,概念和C#中的一样,用法如下:

xmlns:映射名=“clr-namespace:类库中名称空间的名字;assembly=类库文件名”

很眼熟吧,还记得在什么地方看到过?没错,在所有的XAML文件的开头就是这些东西。

有人会觉得有问题:明明我看到的是“http://schemas.microsoft.com/winfx/2006/xaml/presentation”之类的东西啊。其实这个是XAML解析器的硬性编码(hard-coding),意思就是只要看到这些固定的字符,就将一系列的命名空间包含进来。所以不要被这个东西迷惑了,更不要把这这些代码放到浏览器的地址栏中尝试打开网页s。

4.注释

<!-- 我是被注释的内容 -->

这个不多说了,几点注意:只能出现在标签的内容区域,即只能出现在开始标签和结束标签之间;不能注释标签的Attribut;不能嵌套。

转载于:https://www.cnblogs.com/lengjunming/archive/2012/02/08/2272363.html

WPF基础知识学习笔记(一)XAML基础相关推荐

  1. Python 基础知识学习笔记——NumPy

    Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...

  2. Python 基础知识学习笔记——OpenCV(1)

    Python 基础知识学习笔记--OpenCV(1) OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,它轻量而且高效,被广泛的使用. 整理一下OpenCV学习笔记,以防忘记. 文章目录 Py ...

  3. Python基础知识学习笔记——Matplotlib绘图

    Python基础知识学习笔记--Matplotlib绘图 整理python笔记,以防忘记 文章目录 Python基础知识学习笔记--Matplotlib绘图 一.绘图和可视化 1.导入模块 2.一个简 ...

  4. python基础知识学习笔记(2)

    python基础知识学习笔记(2) 整理一下python基础知识,以防忘记 文章目录 python基础知识学习笔记(2) python简洁的一行代码 python简洁的一行代码 1.交换两个变量 # ...

  5. python基础知识学习笔记(1)

    python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...

  6. oracle数据库基础知识总结,oracle数据库基础知识学习笔记

    oracle数据库基础知识学习笔记 一.oracle数据库类型: Char:  字符型(最大长度2000,定长.不足时以空格补充) Varchar2:字符型 最大长度 4000,变长,实际长度由存储的 ...

  7. Python基础知识学习笔记(一)

    Python基础知识学习笔记(一) 文章目录 Python基础知识学习笔记(一) (一) 认识python 1.注释 2.变量及类型 3.关键字(标识符) (1)什么是关键字? (2)查看关键字 (3 ...

  8. opencv-python基础知识学习笔记

    opencv-python基础知识学习笔记 原博地址:https://www.cnblogs.com/silence-cho/p/10926248.html 目录: opencv-python基础知识 ...

  9. 图像基础知识学习笔记

    图像基础知识学习笔记 文章目录 图像基础知识学习笔记 前言 一.图像基础知识相关笔记 1.光学系统影响图像的结构主要包括什么? 2.常见噪声都有什么,其分类,及特点? 3.光圈,快门,景深? 4. I ...

  10. K8s基础知识学习笔记及部分源码剖析

    K8s基础知识学习笔记及部分源码剖析 在学习b站黑马k8s视频资料的基础上,查阅了配套基础知识笔记和源码剖析,仅作个人学习和回顾使用. 参考资料: 概念 | Kubernetes 四层.七层负载均衡的 ...

最新文章

  1. SQL执行过程中的性能负载点
  2. 如何使用matlab的siso,MIMO-SISO-MATLAB-program 和 的 仿真源代码,非常详细,可以参考学习 267万源代码下载- www.pudn.com...
  3. 应用分析:CIO须注意SOA使用中的五大隐患
  4. 超硬核!11 个非常实用的 Python 和 Shell 拿来就用脚本实例!
  5. 算法-排序-计数排序(包含对非负数和整数的排序)
  6. Hadoop 中zoo_数据分析中的Excel、R、Python、SPSS、SAS和SQL
  7. z-index属性简介
  8. Java只读服务器,在服务器端,JSP页面如何只读打开本地的word文件并显示在网页上...
  9. jxl java mer_导出报表出错,有没有大神懂得
  10. 51单片机开发工具安装
  11. var模型可以用spss做吗_求:如何用SPSS做VAR模型?
  12. 运算放大器的基本电路符号
  13. 探索开源工作流引擎Azkaban在MRS中的实践
  14. 创意简约土木黑灰配色PPT模板
  15. 0-VMware Horizon 2203 虚拟桌面-目录大纲
  16. 【100个 Unity小知识点】☀️ | Unity 中怎样读取Excel文件
  17. HDU-4417 Super Mario (主席树)
  18. 使用 Cocos Creator 引擎创建3D资产
  19. 如何在原生Android项目里嵌入Cordova
  20. GoLang之接口转换的原理(8)

热门文章

  1. ubuntu下面的背光键盘的使用
  2. Python学习笔记——os模块【文件、目录方法】
  3. udp本地通信需要注意哪些方面_验房注意什么?验房都需要检查哪些方面?
  4. php文本数据库 搜索,一个文本数据库的搜索方法_php
  5. MongoDB-pymongo
  6. Taro 多端项目实践笔记
  7. java线程和线程池的使用
  8. 基于Linux的USB 主/从设备之间通讯的三种方式
  9. PHPCMS调用相关
  10. 利用jsonp实现跨域登陆