Copyright©byARTCOMPTAllrightsreserved.©byARTCOMPTAllrightsreserved.主要内容WPF介绍XAML介绍布局(Layout)控件(Controls)资源(Resources)&样式(Styles)Copyright©byARTCOMPTAllrightsreserved.WPF(WindowsPresentationFoundation)是微软新一代的显示系统,用于生成能带给用户震撼视觉体验的Windows客户端应用程序。WPF的核心是一个与分辨率无关并且基于向量的呈现引擎,为用户界面、2D/3D图形、文档和媒体提供了统一的描述和操作方法。基于DirectX技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面。WPF介绍Copyright©byARTCOMPTAllrightsreserved.介绍对于用户,最基本、最重要的需求是:需要易于操作的,更好视觉效果的界面。对于开发人员要用最简单的方法开发出尽可能漂亮的界面,给用户带来好的体验。WPF满足了二者的需求。Copyright©byARTCOMPTAllrightsreserved.©byARTCOMPTAllrightsreserved.System.Object类:在.Net中所有类型的根类型System.Windows.Threading.DispatcherObject类:WPF中的大多数对象是从DispatcherObject派生的,这提供了用于处理并发和线程的基本构造。WPF基于调度程序实现的消息系统。System.Windows.DependencyObject类:表示一个参与依赖项属性系统的对象。System.Windows.Media.Visual类:为WPF中的呈现提供支持,其中包括命中测试、坐标转换和边界框计算。System.Windows.UIElement类:UIElement是WPF核心级实现的基类,该类建立在WindowsPresentationFoundation(WPF)元素和基本表示特征基础上。WPF常用的控件类结构Copyright©byARTCOMPTAllrightsreserved.System.Windows.FrameworkElement类:为WindowsPresentationFoundation(WPF)元素提供WPF框架级属性集、事件集和方法集。此类表示附带的WPF框架级实现,它是基于由UIElement定义的WPF核心级API构建的。System.Windows.Controls.Control类:表示用户界面(UI)元素的基类,这些元素使用ControlTemplate来定义其外观。System.Windows.Controls.ContentControl类:表示包含单项内容的控件。System.Windows.Controls.ItemsControl类:表示一个可用于呈现项的集合的控件。System.Windows.Controls.Decorator类:提供在单个子元素(如Border或Viewbox)上或周围应用效果的元素的基类。WPF常用的控件类结构Copyright©byARTCOMPTAllrightsreserved.System.Windows.Controls.Image类:表示显示图像的控件。System.Windows.Controls.MediaElement类:表示包含音频和/或视频的控件。System.Windows.Controls.Panel类:为所有Panel元素提供基类。使用Panel元素在WindowsPresentationFoundation(WPF)应用程序中放置和排列子对象。System.Windows.Sharps.Sharp类:为Ellipse、Polygon和Rectangle之类的形状元素提供基类。WPF常用的控件类结构Copyright©byARTCOMPTAllrightsreserved.©byARTCOMPTAllrightsreserved.创建了一个WPF应用程序,模板中文件层次结构如图所示(在References里面自动引入了图中的PresentationCore、PresentationFramework、WindowsBase程序集)WPF应用程序Copyright©byARTCOMPTAllrightsreserved.©byARTCOMPTAllrightsreserved.©byARTCOMPTAllrightsreserved.–View–ViewModel三组功能(类)分割的设计模式。View为前台显示的界面,主要包括Window窗体和Page;Model为生活中抽象出来的类,如学生、班级等;ViewModel获取数据库数据,结合Model组织界面展示的数据并为前台界面的绑定提供数据。界面调用ViewModel中的数据。Copyright©byARTCOMPTAllrightsreserved.XAML是一种声明性标记语言。如同应用于.NETFramework编程模型一样,XAML简化了为.NETFramework应用程序创建UI的过程。您可以在声明性XAML标记中创建可见的UI元素,然后使用代码隐藏文件(通过分部类定义与标记相连接)将UI定义与运行时逻辑相分离。XAML直接以程序集中定义的一组特定后备类型表示对象的实例化。这与大多数其他标记语言不同,后者通常是与后备类型系统没有此类直接关系的解释语言。XAML实现了一个工作流,通过此工作流,各方可以采用不同的工具来处理应用程序的UI和逻辑。Copyright©byARTCOMPTAllrightsreserved.©byARTCOMPTAllrightsreserved.对象元素:对象元素语法始终以左尖括号()开头,后跟要创建实例的类型的名称。要完成对象元素标记,请以右尖括号()结尾。您也可以使用不含任何内容的自结束形式,方法是用一个正斜杠后接一个右尖括号(/)来完成标记。如:ButtonClick/Button或者ButtonContent=“Click”/XAML语法概述Copyright©byARTCOMPTAllrightsreserved.特性语法(属性):对象的属性通常可表示为对象元素的特性。特性语法命名在特性语法中设置的属性,后跟赋值运算符(=)。特性的值始终以包含在引号中的字符串的形式进行指定。如:ButtonBackground=BlueContent=“Click/属性元素语法:对于对象元素的某些属性,特性语法是不可能实现的,因为无法在特性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息。对于这些情况,可以使用另一个语法,即属性元素语法。XAML语法概述Copyright©byARTCOMPTAllrightsreserved.如:ButtonButton.BackgroundSolidColorBrushColor=Blue//Button.BackgroundButton.ContentClick/Button.Content/ButtonXAML语法概述Copyright©byARTCOMPTAllrightsreserved.附件属性:XAML指定了一个语言功能,该功能允许对任何元素指定某些属性,而不管要设置属性或事件的元素的类型定义中是否存在该属性。DockPanelButtonDockPanel.Dock=LeftHeight=20left/Button/DockPanelXAML语法概述Copyright©byARTCOMPTAllrightsreserved.语法概述标记扩展:标记扩展是一个XAML语言概念。当用于提供特性语法的值时,大括号({和})表示标记扩展用法。此用法指示XAML处理系统不要像通常那样将特性值视为一个文本字符串或者可转换为字符串的值。如:SolidColorBrushx:Key=“brushColor=“Red/BorderStyle={StaticResourcebrush}/BorderCopyright©byARTCOMPTAllrightsreserved.布局(Layout)CanvasStackPanelWrapPanelDockPanelGridCopyright©byARTCOMPTAllrightsreserved.布局(Layout)面板名称说明Canvas定义一个区域,在此区域内,可以使用想对于Canvas区域的坐标显示定位子元素(使用Canvas.LeftCanvas.Right、Canvas.Top、Canvas.Bottom定义与Canvas容器的相对位置)。StackPanel以堆叠的方式显示子元素,可以通过设置Orientation属性来改变堆叠顺序(垂直Vertical水平Horizontal)。WrapPanel从左至右按顺序位置定位子元素,在包含框的边缘处将内容断开至下一行。后续排序按照从上至下或从右至左的顺序进行,具体取决于Orientation属性的值。DockPanel定义一个区域,在此区域中,您可以使子元素互相水平或垂直排列。Grid定义由行和列组成的灵活的网格区域。Copyright©byARTCOMPTAllrightsreserved.控件(Controls)WindowsPresentationFoundation(WPF)附带了许多几乎在所有Windows应用程序中都会使用的常见UI组件,如Button、Label、TextBox、Menu和ListBox。以前,这些对象被称为控件。现在,WPFSDK继续使用术语“控件”泛指任何代表应用程序中可见对象的类。请注意,类不必从Control类继承即可具有可见外观。从Control类继承的类包含一个ControlTemplate,