之所以说“迟到的”,是因为我太晚才开始学习 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. 读取上传的CSV为DataTable

    csv导入文件会把每列的数据用英文逗号分割开来,如果遇到某列中包含英文逗号,则会把该列用英文双引号进行包装. 如果csv文件中某列的数据本身包含英文逗号,应该使用读取字符串的方式进行解析数据,如csv ...

  2. Web字体@font-face对于中文字体的使用

    今天算是刚开始玩博客园..感觉很新鲜在首页 上看到了一个博客http://www.cnblogs.com/liuminghai/p/4238256.html是关于web文字的,挺不错 但是B/S的前端 ...

  3. java_log4j----java 日志管理

    log4j 有三个主要组件: 类别Loggers------消息类型和优先级 附加目的地Appenders-------在哪里报告消息 布局Layouts------控制如何格式化消息 这三个组件共同 ...

  4. json 解析解乱码

    1. 该法的字符编码: 串店txt文档文档都有自己的编码,例如utf-8,ansi等待,但当 存款txt文件.其编码将和txt编码文件本身一致.  例如,之前的字符编码ansi.txt该文件的编码是u ...

  5. 客户端程序通过TCP通信传送"小文件"到服务器

    客户端程序通过TCP通信传送"小文件"到服务器 [c#源码分享]客户端程序通过TCP通信传送"小文件"到服务器 源码  (不包含通信框架源码,通信框架源码请另行 ...

  6. Tomcat 80 端口被占,解决方案

    Windows 平台下Tomcat启动不起,显示 SEVERE: Failed to initialize end point associated with ProtocolHandler [&qu ...

  7. .net 职责链来实现 插件模式

    .net 职责链来实现 插件模式 插件式的例子 QQ电脑管家,有很多工具列表,点一下工具下载后就可以开始使用了 eclipse ,X Server 等等 插件式的好处 插件降低框架的复杂性,把扩展功能 ...

  8. Touch Punch在移动设备上面增加jQuery UI的触摸支持|Jquery UI 支持移动端 触摸滑动等

    jQuery UI是我们前台开发常用的UI前端类库,但是目前的jQuery UI用户界面类库在互动和widget上并不支持touch事件.这意味着你在桌面上设计的优雅的UI可能在触摸设备,例如,ipa ...

  9. a链接bug

    <a href=”javascript:void(0);” class="btn" id="btn"></a> 在ios系统中(andr ...

  10. Installshield停止操作系统进程的代码--IS5版本适用

    原文:Installshield停止操作系统进程的代码--IS5版本适用 出处:http://www.installsite.org/pages/en/isp_ext.htm这个地址上有不少好东西,有 ...