WPF XAML 基础.docx

上传人:b****7 文档编号:10439652 上传时间:2023-02-11 格式:DOCX 页数:42 大小:386.25KB
下载 相关 举报
WPF XAML 基础.docx_第1页
第1页 / 共42页
WPF XAML 基础.docx_第2页
第2页 / 共42页
WPF XAML 基础.docx_第3页
第3页 / 共42页
WPF XAML 基础.docx_第4页
第4页 / 共42页
WPF XAML 基础.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

WPF XAML 基础.docx

《WPF XAML 基础.docx》由会员分享,可在线阅读,更多相关《WPF XAML 基础.docx(42页珍藏版)》请在冰豆网上搜索。

WPF XAML 基础.docx

WPFXAML基础

  #1.什么是WPF

  WPF(WindowsPresentationFoundation)是从.NetFramework从3.0开始加入的提供了全新的多媒体交互用户图形界面的类库,真正做了开发和设计分离的工作。

WPF程序可以在桌面运行,也可以在WEB浏览器上运行(Silverlight).

  WPF使用3D矢量图形元素来进行图形渲染,独立于屏幕分辨率。

使用DirectX硬件加速来渲染图形元素。

带来了更绚丽的色彩和炫酷的效果。

.Net3.0后WPF逐步代替WindowsForm成为了新一代的Windows客户端技术。

  #2.图形渲染级别(RenderingTiers)

  WPF应用程序会自动检查显卡运行能力并分配给一个渲染能力值。

指示哪些功能可以通过图形层次完成。

  级别Tier0-没有硬件加速,所有用软件绘制。

  级别Tier1-一部分使用硬件加速,需要DirectX版本高于9.0.硬件加速部分:

径向渐变(Radialgradients),3D亮点图形计算(3Dlightingcalculations),文字渲染(Textrendering),3D抗锯齿(3Danti-aliasing).

  级别Tier2-大部分使用硬件加速。

Directx版本高于9.0

  获得当前渲染级别方法:

intrenTier=(RenderCapability.Tier>>16);

MessageBox.Show(string.Format("Tier={0}",renTier));

 

  #3.矢量图形,与分辨率无关

  在WPF中,图形渲染使用的是矢量,而不是位图。

无论是默认控件还是自定义样式图像都是与分辨率无关。

  WPF代替了位图在屏幕上渲染图形每个像素的方法,矢量绘制了一些基础的单元:

如形状,线,多边形等。

  因为WPF使用了矢量图形绘制,所以用户界面元素独立于实际设备的分辨率来渲染。

WPF绘制的图像尺寸使用了与设备无关的单位,每一个单位是1/96英寸。

这意味着用户界面的元素总是会呈现指定大小,不会被分辨率(DPI)影响。

  

  #4.WPF布局(Layout)

  WPF使用了流式布局模型来进行定位元素,而不是使用精确的像素坐标来确定控件的位置。

使用了描述性语言XAML来进行定位,类似HTML和CSS网页布局,极为简捷方便。

  流式布局模型可以使WPF布局可以进行动态调整以适合窗口,呈现流动状态。

WPF界面的大小和分辨率并无关系。

  所有的WPF控件都是被承载在一个容器(Container)里,主流的容器有:

Grid,DockPanel,StackPanel,WrapPanel.

  

  

  #5.样式(Style)

  样式是类似CSS功能的一组可以重用的设置类似性质控件的属性值。

你可以将之存储为资源(Resource),然后应用在多个控件上。

举个样例,你应用中所有的button都是一个风格,你需要先定义一个样式作为静态资源(StaticResource)

Key="StdButton"TargetType="Button">

  然后你就可以应用到你需要样式的button上:

  

  #6.模板(Template)

  模板类似与样式(Style),但实际并不相同。

模板可以更换一个UI控件的外观,但不能改变其行为。

一般Template都定义在Style之中。

WPF每一个控件都有其默认的模板,你可以撰写一个模板来代替其默认模板来进行私人定制。

  通过改变模板的属性来改变其模板。

下面是一个例子,我们创建了一个新的button,它具有了加厚的蓝色边框。

  

Key="Crazy"TargetType="Button">

  

  #7.命令(Commands)

  WPF提供对命令(Commands)的支持,Command在WPF中是事件的进化体。

WPF可以将Command绑定到空间上,来减少重复的事件代码。

多个控件可以使用同一个Command逻辑。

Command可以使UI和逻辑分离,实现了UI操作,后台执行命令逻辑。

WPF程序内置了很多命令,如Paste,Copy,Save等。

  下面代码展示了控件绑定命令的两种方式:

  

//Createbinding--whichbindsthecommandtoyourcode

CommandBindingbinding=newCommandBinding(ApplicationCommands.New);

binding.Executed+=newExecutedRoutedEventHandler(CommandNew_Executed);

this.CommandBindings.Add(binding);

 #8.Xaml和CodeBehind

  WPF应用是由前端代码Xaml(可扩展应用程序标记语言)和后台代码(托管代码)组成。

标记性语言Xaml定义了UI的布局和外观,后台定义了行为和逻辑。

WPF技术实现了UI和后台逻辑的分离。

 Xaml是一个基于Xml的声明式标记语言编写的。

Xaml中组织了所有的控件,以及他们的位置和父子关系。

后端.cs托管代码描述了运行时UI的逻辑和行为。

在编译阶段xaml和xaml.cs会编译为一个class,所以xaml.cs你可以看出是patical的。

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

1

2

3

4

5

6

  

  #9.标记性语言的优势

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

使用Xaml的好处有:

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

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

分工两不误。

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

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

  

  

  #10.基于Page的页面导航

  WPF应用程序可以用一些pages的集合以及其页面导航机制来进行构建。

和WindowsForm的文档流式的模型不同,它拥有一个主窗体和一个可以弹出的提醒窗口。

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

  

Class="WpfApplication7.Page1"xmlns="xmlns:

x="xmlns:

mc="http:

//schemas.openxmlformats.org/markup-compatibility/2006"xmlns:

d="mc:

Ignorable="d"d:

DesignHeight="300"d:

DesignWidth="300"Title="Page1">

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

Class="WpfApplication7.App"xmlns="xmlns:

x="StartupUri="Page1.xaml">

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

  

  #11.WPFvsSilverlightvsASP.NET

  WPF,Silverlight,ASP.NET是微软开发的三大平台。

下面列出三种平台各自的特点

  WPF:

  1.开发Windows应用程序

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

  3.只能运行在Windows上

  4.需要完整的.netframework支持。

  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图形的绘制以呈现其最大性能。

  而且WPF4.0是基于DirectX9.0,所以并不支持Direct3D10和Direct3D11。

   

 #13.WPF的版本记录

   虽然下面列出WPF版本的历史记录和相对应的VS版本。

由于WPF是.NETFramework框架一部分,所以版本号是跟着.NETFramework的。

下面就是其记录:

.NETFramework3.0–Nov,2006

∙1streleaseofWPF

∙CLRversion2.0

∙VisualStudio2005SP1

∙Inclw/WindowsVista

∙.NETFramework3.5–Nov,2007

∙VariousimprovementstoWPF

∙CLRversion2.0SP1

∙VisualStudio2008

∙Inclw/Windows7

∙.NETFramework3.5SP1–Aug,2008

∙Performanceimprovements(etal)toWPF

∙CLRversion2.0SP2

∙VisualStudio2008SP1

∙.NETFramework4.0–Apr,2010

∙VariousimprovementstoWPF

∙CLRversion4.0

∙VisualStudio2010

∙.NETFramework4.5–Aug,2012

∙VariousimprovementstoWPF

∙CLRversion4.5

∙VisualStudio2012

∙Inclw/Windows8

 

  #14.SilverlightandWPF不同之处

   Silverlight原名叫做WPF/E(WPF/Everywhere),个人觉得原名很拽。

通过名字就可以知道SL和WPF遵循相同的编程模型和大部分空间,可以理解为SL是WPF的一个浏览器特殊版本。

  核心区别:

  1.WPF只运行在WIndows平台

  2.WPF需要.NETFramework

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

  4.SL使用了.NETFRAMEWORK和CLR的子集

  WPF独有:

  1.支持流文件Flowdocument

  2.支持动态资源Dynamicresources

  3.Mergeddictionaries(SL3已有)

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

  5.Style继承(SL4已有)

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

  7.Styles,ControlTemplates,DataTemplate的Triggers

  8.Routedcommands

  9.自定义标记扩展(Custommarkupextensions)(SL5已有)

  10.运行时访问的可视化和逻辑树(VisualTree已有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.深度缩放(DeepZoom)

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

 #15system.windows命名空间

  大多数wpf用户界面相关的类的命名空间都是system.windows或者其子命名空间。

  下面列出一些在system.window命名空间下的类:

1Application–EncapsulatedaWPFapplication

2Clipboard–Transferdatato/fromclipboard

3ContentElement–Baseclassforcontentselements,forflow-stylepresentation

4DataObject–Transferingdata

5DataTemplate–Visualstructureofadataobject

6DependencyObject–Objectthatparticipatesindependencypropertysystem

7DependencyProperty–Propertiesthatsupportdatabinding,inheritance,etc.

8EventManager–Event-relatedutilitymethods

9FrameworkElement–ExtendsUIElement&providessupportforlogicaltree,etal

10MessageBox-Displaysamessagebox

11ResourceDictionary–DictionarythatcontainsWPFresources

12RoutedEvent–Routedevent

13Style–Sharingofproperties/resourcesbetweeninstances

14UIElement–Baseclassforgraphicalelements

15UIElement3D–Baseclassfor3Delements

16Window–Windowinuserinterface

  

  #16独立和浏览器承载的应用程序

  wpf可以创建独立的windows应用程序在windows环境下运行或者创建浏览器承载的应用程序,在浏览器中运行。

浏览器承载的应用程序也被称之为xbaps(xaml浏览器应用程序)。

  发布的XBAP托管在一个web的服务器上,访问者机器首先下载和安装应用程序所需要的silverlight插件,当用户第一次浏览xbap页面时,用户界面会显示在浏览器的窗口中。

 

  XBAPS可以在ie和firefox中完美运行。

  

  #17WPF单位

  在windowsforms开发中,控件的大小是根据像素生成的。

而在wpf中使用的是wpf单位。

  1wpfunit=1/96inch。

这个说明了在96dpi下,一个wpf单位为一个像素(pixel)。

这就意味着在120dpi下,一个wpf单位是1.25pixel。

  由于WPF所有的元素都是使用wpf单位来进行大小绘制的,所有的控件都是会基于设备系统的DPI。

这样就可以保证在不同的设备上有着相同的物理尺寸。

换句话说就是一个96WPF单位的元素无论是在96dpi下还是120dpi下都是1英寸大小(96pixel=1英寸)。

  在WindowsForm下如果想做到设备无关性,需要设置AutoScaleMode,但在WPF中是自动的。

  计算公式:

#pixels=(#WPFUnits)*(DPI/96)

  

  #18WPF结构

  下面结构图展示了WPF主要的一些dll之间的依赖关系:

  

  下面列出在上图中的dll:

  System.Windows.Presentation.dll–Containssometypesrelatedtoadd-ins

   PresentationFramework.Aero.dll–ImplementsAerothemeforWPFcontrols

∙PresentationFramework.Classic.dll–ImplementsClassicthemeforWPFcontrols

∙PresentationFramework.dll–ContainsmostofthemainWPFcontrols,aswellassupportfordatabinding

∙PresentationUI.dll–Containssomeresourcesrelatedtothemes&somesupportclassesforSystem.Windows.Documents

∙ReachFramework.dll–ContainstypesrelatedtoprintingandXPSdocuments

∙System.Printing.dll–Containsmaintypesrelatedtoprinting

∙PresentationCore.dll-LowerleveltypesforvisualrenderinglikeUIElement.AlsoDragDropsupport.

∙System.Windows.Input.Manipulations.dll-Implementationofinputmanipulators

∙UIAutomationProvider.dll-SupportforUIAutomation(foraccessibility)

∙WindowsBase.dll-Lower-leveltypeslikeDependencyObjectandDependencyProperty

∙UIAutomationTypes.dll–Basictypes

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1