之所以说“迟到的”,是因为我太晚才开始学习 WPF 了,之前 WPF 刚发布的时候有过粗浅了解,那时的 WPF 还非常简陋,VS 提供的内置控件十分匮乏,让我这样的非常依赖 WinForm 形式“控件”程序爱好者很是难受,既垂涎于 WPF 提供的创新的表现技术,又因为没有“足够”的现成的控件来使用而暂时放弃,因为不是专业 Coder 所以并不急于学习,直到现在。

跟随的学习教材是群里同学提供的《WPF编程宝典.C#2010版》,不多说废话,点滴记录学习所获吧。

1. WPF 使用的是 DirectX 作为引擎,所以理论上和实际表现上都远超过使用 GDI+ 的原 WinForm 模式,即便是 2D 平面绘制也是将信息转化为三角形交由 Direct3D 渲染。结论:WPF 的底层处理已经完全不同于原先的 Windows 下程序,DirectX 是关键鞋底。

2. WPF 有一个特性很好,就是“设备无关”性的坐标理解。因为其不同于原来“像素”性的画法,WPF 可以自动处理不同分辨率设备产生的缩放给应用程序带来的影响。结论:WPF 真正完成了比例性显示,而不是原来 WinForm 下程序因为分辨率的更改带来窗体的面目全非。

3. XAML(咋没了)是描述 WPF 程序界面最合适的方法,但 XAML 属于 WPF 的一部分,WPF 也并非必需 XAML 才能运行,这一点要理解,不理解要记住,记不住要知道,不知道就打。

4. XAML 中所有元素都映射为一个 .Net 实例,比如<Button>就表示一个 WPF 要创建一个 Button 对象,这一点可以简单理解为,XAML 语言中没有废话,挺好。

5. 因为属于 XML 语言范畴,XAML 中的对象支持嵌套,比如 <Grid><Button></Button></Grid>,这表示 Gird 里边有一个 Button。这种嵌套表示对象之间的层级关系,也可以表示属性。

<Grid>
<Grid HorizontalAlignment="Left" Height="165" Margin="10,10,0,0" VerticalAlignment="Top" Width="497"/>
<Grid.Background>
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.00" Color="Green"></GradientStop>
<GradientStop Offset="0.70" Color="IndianRed"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Grid.Background>
</Grid>

6. 以上面代码为例,简单描绘一个“元素”(WPF 中每一个显示对象都称为元素而非控件,控件一般指可交互的元素)的属性可以用 <Grid HorizontalAlignment="Left"> 这种属性-特性方式,如果要设置复杂属性,可以使用嵌套方式,像上面代码中 <Gird.Background>…</Grid.Background> 中的部分。在 <LinearGradientBrush> 下直接写 <GradientStop Offset= Color=> 也可以,只要层级关系正确就可以。

7. 标记扩展——一种以非常规方式设置属性的语法,用于不希望对属性进行硬编码的情况下,标记扩展可用于“嵌套标签”或“特性”,当用于特性中时,它被 {} 包含起来,使用 {标记扩展类 参数} 的语法,如 <GradientStop Offset="0.50" Color="{x:Static SystemColors.ActiveCaptionBrush}"/>。因为标记扩展被映射为“类”,所以可以在嵌套中直接写

<Grid.Background>
<x:Static Member="SystemColors.ActiveCaptionBrush"></x:Static>
</Grid.Background>

8.  附加属性,可以用于多个控件,但在另一个类中定义的属性。例如当一个 textBox 放在 Grid 中,textBox 便获得了额外的特性。附加属性使用两个部分的命名形式 定义类型.属性名,如

<Grid HorizontalAlignment="Left" Height="165" Margin="10,10,0,0" VerticalAlignment="Top" Width="497">
<TextBox HorizontalAlignment="Left" Height="23" Margin="88,54,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
<TextBox Grid.Row="2">[This is a Textbox]</TextBox>
</Grid>

注意附加属性根本不是真正的属性,而是被转换为方法调用 Grid.SetRow(textBox,2)

9. XAML 推荐一种构造元素特性的顺序,即先设置 Name 属性(可以不设置),再设置上所有的事件,后边再写属性-特性,这样做的好处是,可以保证所有对属性变化做出响应的事件都可以在第一次设置属性时被执行而不会被落下。

迟到的 WPF 学习 —— 入门的更多相关文章

  1. 迟到的 WPF 学习 —— 依赖项属性

    本章学习依赖项属性,英文原文 Dependency Property,它是传统 .Net Framework 属性的扩展,是 WPF 的专属,但所幸使用起来和传统属性几乎一样.WPF 元素所提供的大多 ...

  2. 迟到的 WPF 学习 —— 路由事件

    1. 理解路由事件:WPF 通过事件路由(event routing)概念增强了传统的事件执行的能力和范围,允许源自某个元素的事件由另一个元素引发,例如,事件路由允许工具栏上的一个按钮点击的事件在被代 ...

  3. 迟到的 WPF 学习 —— 控件

    这一章书中内容比较多而杂,但每个对象的内容又相对简短,所以只挑选里边有代表性的内容做记录. 1. Label 控件:一个基础的简单的 ContentControl,Labe 支持快捷键文本的设置,可以 ...

  4. 迟到的 WPF 学习 —— 布局

    布局是 WPF 很重头的一部分内容,这一部分梳理和记录关于布局章节的知识点. 1. WPF 使用一种基于流(Flow-based)的概念来处理布局逻辑,将传统的基于"坐标"的思想尽 ...

  5. WPF快速入门系列(1)——WPF布局概览

    一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...

  6. WPF从入门到放弃系列第二章 XAML

    本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...

  7. WPF自学入门(三)WPF路由事件之内置路由事件

    有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...

  8. WPF自学入门(六)WPF带标题的内容控件简单介绍

    在WPF自学入门(二)WPF-XAML布局控件的文章中分别介绍StackPanel,WarpPanel,DockPanel,Grid,Canvas五种布局容器的使用,可以让我们大致了解容器可以使用在什 ...

  9. wpf学习

    http://www.jikexueyuan.com/course/1231_3.html?ss=1 WPF入门教程系列二——Application介绍 http://www.cnblogs.com/ ...

随机推荐

  1. LeetCode:same_tree题解

    一.     题目: 给定两个二叉树,编写一个函数来检查它们是否相等或为空树.假设两个二叉树被觉得是相等的,那么它们在结构上是同样的,而且随意节点具有同样的值. 二.     分析 非常easy的题目 ...

  2. [CLR via C#]5.4 对象哈希码和dynamic基元类型

    原文:[CLR via C#]5.4 对象哈希码和dynamic基元类型 FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处.为此,System.Object提供了虚方 ...

  3. rpm安装FAQ

    1.error: cannot create %sourcedir /usr/src/redhat/SOURCES错误的解决方案 显现error: cannot create %sourcedir / ...

  4. How to:installshield安装包怎样才能出现选择路径的界面?

    原文:How to:installshield安装包怎样才能出现选择路径的界面? 这个问题新手问的很多,installshield的安装包默认设置下选择路径的界面藏在Custom安装类型下.在做完安装 ...

  5. Yii2中如何使用CodeCeption

    Yii2和CodeCeption CodeCeption是一个全栈的PHP测试框架,关于CodeCeption的介绍见:CodeCeption官方文档. Yii2官方增加了对CodeCeption的支 ...

  6. 让Windows 8 / 8.1 以及 Windows Server 2012 / 2012 R2的任务管理器的性能面板,显示磁盘数据

    运行[diskperf -y],关闭任务管理器,重新打开即可.

  7. PHP 5:PHP语法导向

    原文:PHP 5:PHP语法导向 代码                                                                                  ...

  8. Ubuntu终端字体颜色方案

    默认: 蓝色代表该文件夹: 绿色代表可运行文件. 红色表示压缩文件. 浅蓝色表示链接文件: 灰色表示其它文件: 红色闪烁表示链接的文件有问题了 黄色表示设备文件. 非常不爽怎么办,改! # Attri ...

  9. Ora创建job定时执行某存储过程

    --创建job任务,每天晚上8点执行存储过程:por_postrecords-- declare job number; begin sys.dbms_job.submit(job =>job, ...

  10. .Net Framework基础知识

    .net常识 .net framework是微软为开发应用程序而创建的一个富有革命性的新平台:   .net可以用来开发windows应用程序,web应用程序,web服务和其它各种类型的程序.   . ...