之所以说“迟到的”,是因为我太晚才开始学习 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. WPF - Visual调试工具Snoop

    原文:WPF - Visual调试工具Snoop Snoop经过很长一段时间,最近更新到支持NET 3.5了,它是一个WPF运行时对Visual UI调试的一个工具,最近我用过它调试修改过一个bug, ...

  2. OpenVPN多处理之-最新架构

    好久没有更新这个系列了,由于我之前也说过,前段时间实在太忙了,并且早在一个月前就预示着本月将更加忙!事实也确实如此!最终在国庆前夕完毕了既定的计划,心里也最终能够长出一口气了.近期在忙什么呢?事实上就 ...

  3. .net 控件开发第二天 怎么将 第一天写的代码 用到 .net中来

    前面第一天 我们看到的全是 js的代码,虽然不管是BS的框架是java 还是 php,复用性 还是特别高的,  但是 写起来比较费劲,怎么办,我们能不能 更 简单点呢? 当然可以,这个时候我们就要用到 ...

  4. 【百度地图API】如何利用地图API制作汽车沿道路行驶的动画?——如何获得道路层数据

    原文:[百度地图API]如何利用地图API制作汽车沿道路行驶的动画?--如何获得道路层数据 有几个做汽车导航的朋友问我说,他们想在地图上制作一辆车沿着道路行驶的动画.可是,百度地图的道路数据并没有公开 ...

  5. Android结构分析Android智能指针(两)

    笔者:刘蒿羽 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在上一篇文章中,我们分析了Android智能指针中的强指针sp,本文我们来分析弱指 ...

  6. 8.无法訪问developer.android.com的解决方式。

    问题:无法訪问developer.android.com,就无法知道Android的最新信息. 解决的方法:寻找国外的代理ip,比方http://www.xici.net.co/上面的国外代理ip. ...

  7. 从久负盛名的GoDaddy开发革命来看Node.js的风靡程度

    英文原文连接:http://venturebeat.com/2015/02/09/godaddy-nodejitsu/ 网站主机托管公司GoDaddy将要进一步通过新的开发工具来提升自身能力.最新消息 ...

  8. mysql utf8mb4与emoji表情

    一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji表情符号,在外国的手机短信里 ...

  9. linux下的watch命令

    linux下的watch命令 在linux下,watch是周期性的执行下一个命令,并全屏显示执行结果. watch [-dhvt] [-n <seconds>] [--difference ...

  10. String 的intern() 方法说明

    1.说明 Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,就会在字符串常量池中创建该字符串然后再返回. 2.源码说明 public native ...