在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情。最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,000 Things You Should Know About WPF 。听到博客名字就懂这个人有多伟大了吧。他以类似微博式的150字简短语言来每天更新一条WPF和C#重要又容易被遗忘的知识。Follow他的博客也有一段日子了,很希望能够分享给大家。

  本系列我不仅会翻译他的每一个tip,也会加入自己开发之中的看法和见解,希望能够以更贴近的语言来展示大师的风采。本系列我希望自己也能和他一样坚持下来,每天的进步才能促成伟大。

  如果大家更想了解这个伟大的程序员,这个是访谈链接,他在访谈中有谈到自己生平和对编程相关学习的看法,我觉得对大家会帮助很大,有时间后面会出一篇翻译这个访谈的文章供大家阅读,希望大家能够关注。

  在这里郑重说明.该系列是基于Sean Sexton先生的英文博客, Sean Sexton拥有全部版权和撤销权利。

  前文:<1-7>WPF, 渲染, 矢量, 布局, 样式, 模板, 命令

  [小九的学堂,致力于以平凡的语言描述不平凡的技术。如要转载,请注明来源:小九的学堂cnblogs.com/xfuture]

  


  

  #8. Xaml和Code Behind

  WPF应用是由前端代码Xaml(可扩展应用程序标记语言)和后台代码(托管代码)组成。标记性语言Xaml定义了UI的布局和外观,后台定义了行为和逻辑。WPF技术实现了UI和后台逻辑的分离。
    Xaml是一个基于Xml的声明式标记语言编写的。Xaml中组织了所有的控件,以及他们的位置和父子关系。后端.cs托管代码描述了运行时UI的逻辑和行为。在编译阶段xaml和xaml.cs会编译为一个class, 所以xaml.cs你可以看出是patical的。

  下面代码是一个Xaml布局的样例:

 <Grid>
<StackPanel>
<Button Content="Save" Height="23" Name="btnSave" Width="75" Click="btnSave_Click" />
<Button Content="Load" Height="23" Name="btnLoad" Width="75" Click="btnLoad_Click" />
</StackPanel>
</Grid>

  

  #9. 标记性语言的优势

  使用标记性语言Xaml和后台代码Xaml.cs模型开发比一切都定义在代码中有着很多的优势。使用Xaml的好处有:

  1. 可以在不影响控件行为的情况下更改用户界面的样式和用户体验。

  2. 设计人员可以和开发同时工作,一个负责Xaml做用户界面, 一个负责撰写后台逻辑。分工两不误。

  3. 微软提供了强大的设计工具Expression Design和Blend, 使用工具可以免写代码, 设计的界面可以直接导出成Xaml.

  4. Vs2013已经和Blend做了很好的集成,可以更高效率的做设计和开发。

  

  

  #10. 基于Page的页面导航

  WPF应用程序可以用一些pages的集合以及其页面导航机制来进行构建。和WindowsForm的文档流式的模型不同,它拥有一个主窗体和一个可以弹出的提醒窗口。

  如果想要创建一个基于Page的WPF程序,你需要定义一个Page来代替传统的Window:

  

<Page x:Class="WpfApplication7.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
Title="Page1">
<Grid>
<Label Content="This is a page, not a window." Height="28" HorizontalAlignment="Left" Margin="52,75,0,0" Name="label1" VerticalAlignment="Top" />
</Grid>
</Page>

  同时你需要指定app的starturi为该page

<Application x:Class="WpfApplication7.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Page1.xaml">
</Application>

  此时你便拥有了一个基于Page导航的WPF应用程序。

  

  #11. WPF vs Silverlight vs ASP.NET

  WPF, Silverlight, ASP.NET是微软开发的三大平台。下面列出三种平台各自的特点

  WPF:

  1. 开发Windows应用程序

  2. 以最丰富的用户控件和windows特定功能构建的客户端用户界面。

  3. 只能运行在Windows上

  4. 需要完整的.net framework支持。

  Silverlight:

  1. 开发运行在Web端

  2. 轻量客户端,丰富的UI控件,类似于WPF客户端呈现

  3. 需要安装Silverlight插件在浏览器上

  4. Silverlight的Moonlight版本可以在linux上运行

  5. 第一次加载时需要安装SL插件。

  ASP.NET:

  1. 开发Web应用程序

  2. 轻量客户端,有着通用的Web控制

  3. 可以在服务端运行,也可以运行在所有支持HTML的客户端,包括移动设备的浏览器

  4. 不需要在客户端安装插件

 

  #12. 在3D硬件加速应用中使用Direct3D

     虽然WPF提供3D绘制,但是3D应用中还是需要Direct3D来进行3D图形的绘制以呈现其最大性能。

  而且WPF 4.0是基于DirectX9.0, 所以并不支持Direct3D 10 和 Direct3D 11。

   

   #13. WPF的版本记录

    虽然下面列出WPF版本的历史记录和相对应的VS版本。由于WPF是.NET Framework框架一部分,所以版本号是跟着.NET Framework的。下面就是其记录:

.NET Framework 3.0 – Nov, 2006

  • 1st release of WPF
  • CLR version 2.0
  • Visual Studio 2005 SP1
  • Incl w/Windows Vista
  • .NET Framework 3.5 – Nov, 2007
    • Various improvements to WPF
    • CLR version 2.0 SP1
    • Visual Studio 2008
    • Incl w/Windows 7
  • .NET Framework 3.5 SP1 – Aug, 2008
    • Performance improvements (et al) to WPF
    • CLR version 2.0 SP2
    • Visual Studio 2008 SP1
  • .NET Framework 4.0 – Apr, 2010
    • Various improvements to WPF
    • CLR version 4.0
    • Visual Studio 2010
  • .NET Framework 4.5 – Aug, 2012
    • Various improvements to WPF
    • CLR version 4.5
    • Visual Studio 2012
    • Incl w/Windows 8

 

  #14. Silverlight and WPF 不同之处

     Silverlight原名叫做WPF/E(WPF/Everywhere), 个人觉得原名很拽。通过名字就可以知道SL和WPF遵循相同的编程模型和大部分空间,可以理解为SL是WPF的一个浏览器特殊版本。

  核心区别:

  1. WPF只运行在WIndows平台

  2. WPF需要.NET Framework

  3. SL是WPF控件的一个子集

  4. SL使用了.NET FRAMEWORK和CLR的子集

  WPF独有:

  1. 支持流文件 Flow document

  2. 支持动态资源 Dynamic resources

  3. Merged dictionaries(SL3已有)

  4. 重置样式到一个新的FrameworkElement

  5. Style继承(SL4已有)

  6. 隐式样式TargetType属性(SL5已有)

  7. Styles, ControlTemplates, DataTemplate的Triggers

  8. Routed commands

  9. 自定义标记扩展(Custom markup extensions)(SL5已有)

  10. 运行时访问的可视化和逻辑树(Visual Tree 已有 SLSPY工具 也可以看到)

  11. 一些WPF独享的控件(AccessText, BulletChrome, ButtonChrome, ContextMenu, Decorator, DocumentPageView, DocumentViewer, GridViewColumnHeader, GridViewRowPresenter, GroupBox, GroupItem, InkCanvas, Menu, MenuItem, PageContent, Ribbon, Separator, StatusBar, TickBar, ToolBar, Track, UniformGrid)

  SL独有:

  1. 深度缩放(Deep Zoom)

  2. 一些SL独享控件( AutoCompleteBox, DataPager, DescriptionViewer, HyperlinkButton, MultiScaleImage, NumericUpDown, ValidationSummary)

  更新后续15-21,敬请期待。

2000条你应知的WPF小姿势 基础篇<8-14>的更多相关文章

  1. 2000条你应知的WPF小姿势 基础篇<15-21>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...

  2. 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  3. 2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  4. 2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  5. 2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  6. 2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  7. 2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>

    前一阵子由于个人生活原因,具体见上一篇,耽搁了一阵子,在这里也十分感谢大家支持和鼓励.现在开始继续做WPF2000系列. 在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件 ...

  8. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  9. 2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  10. 2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

随机推荐

  1. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

  2. C++内存对齐总结

    大家都知道,C++空类的内存大小为1字节,为了保证其对象拥有彼此独立的内存地址.非空类的大小与类中非静态成员变量和虚函数表的多少有关. 而值得注意的是,类中非静态成员变量的大小与编译器内存对齐的设置有 ...

  3. ajax异步请求

    做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...

  4. javascript之活灵活现的Array

    前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...

  5. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  6. 【NLP】Python NLTK获取文本语料和词汇资源

    Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...

  7. Spark读写Hbase的二种方式对比

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...

  8. 微信开发 :WeixinPayInfoCollection尚未注册Mch 问题解决

    在使用开源项目 SENPARC.WEIXIN SDK 调用微信支付接口的时候出现了WeixinPayInfoCollection尚未注册Mch,这个问题. 最后地解决方案是: 我这个傻逼忘了在全局Gl ...

  9. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

  10. 文档对象模型DOM通俗讲解

    转自:http://www.jb51.net/article/42671.htm 在开始之前先说一点,DOM是非常容易理解的,但是大家说的太官方,让人很是难于理解,我们就用非常简单的语言翻译一遍.加深 ...