文章目录
概述
Windows Presentation Foundation (简称 WPF)。
WPF 的核心是一个与分辨率无关且基于矢量的呈现引擎,旨在充分利用现代图形硬件。 WPF 通过一套完善的应用程序开发功能对该核心进行了扩展,这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。 WPF 属于 .NET,因此可以生成整合 .NET API 其他元素的应用程序。
简介
Windows用户界面框架,统一的编程模型、语言和框架,做到了界面设计与后端开发分离。
特点
1.呈现效果不受分辨率的影响,不同分辨率尺寸大小保持布标
2.基于DirectX 3d技术,图形渲染时,尽可能让显卡GPU去做,提高了硬件加速,可以做出炫酷的界面
3.提供UI框架,集成了矢量图形、流动文字支持、3d视觉效果和控件模型框架
4. UI与业务逻辑彻底分离,UI-XAML描述(底层wpf引擎是把元素解释成对应的对象)
5. xp server2003 到 window7及以后的操作系统版本 都可以支持
6.基于数据驱动,数据是核心
WinForm和WPF的区别
作为Windows桌面UI开发的两大.net开发库,WinForm和WPF同时存在着。之所以功能如此重合的两个库同时存在,是因为两者的底层差异非常大,WinForm底层依赖于传统的Win32API,特别是User32.dll;而WPF则底层依赖于Direct3D。 而我们知道User32和Direct3D两者是平行存在,彼此独立的。WPF之前几乎所有的WindowsUI开发都依赖于User32,当然游戏除外。随着Direct3D的日趋成熟和显卡的普通性能提升,微软力图改变这种状况,所以开发出了WPF来让一般的应用程序也使用Direct3D进行UI开发。当然,这一改变的影响是巨大的,传统的User32是以窗口为基础的,所有的控件都是一种特殊的窗口而已。而在Direct3D里,不再有窗口的存在。
最大的区别主要是布局方式和驱动方式。首先谈下布局方式,一般来说,界面布局的方式有两种,一种是拖控件,另一种是通过布局控件来实现,而Winform主要是以拖控件的方式为主,配合布局控件做整体布局,而WPF则恰恰相反,虽然也可以拖控件,但是很少这么做,主要是通过编写XAML代码来实现。
再来说下驱动方式,Winform是基于事件驱动,WPF是基于数据驱动,以操作一个按钮,执行一个查询操作为例,Winform是在按钮的点击事件里,写好查询代码,然后将结果展示在数据控件里,而WPF则是通过按钮绑定一个动作方法,数据控件绑定好数据源,在方法里查询即可,这样做的目的就是尽量减少前后端的耦合。
什么是XAML
XAML 是一种声明性标记语言。 应用于 .NET Core 编程模型时,XAML 简化了为 .NET Core 应用创建 UI 的过程。 XAML 文件是通常具有 .xaml 扩展名的 XML 文件。 可通过任何 XML 编码对文件进行编码,但通常以 UTF-8 编码。
对象元素语法
对象元素语法 是 XAML 标记语法,它通过声明 XML 元素来实例化 CLR 类或结构。 此语法类似于其他标记语言(如 HTML)的元素语法。
- 单标签格式: 由一个标签组成,用/>结尾,是一种简写。单标签算是xml里的一种特殊格式,纯xml是不建议使用的标签中嵌套其他内容。内容简单的如只有一个属性的可以单标
- 双标签格式: 由开始标签和结束标签组成;双标签可以替换
XAML根元素
一个 XAML 文件只能有一个根元素,这样才能同时作为格式正确的 XML 文件和有效的 XAML 文件。 对于典型 WPF 方案,可使用在 WPF 应用模型中具有突出意义的根元素(例如,页面的 Window 或 Page)。
在根标签下面有且只能有一个二级标签。在二级标签里面我们可以写多个三级 四级标签。
<Window>
<【布局标签】>
【其他标签....】
</【布局标签】>
</Window>
<Page>
<Window.Resources>
....
</Window.Resources>
<【布局标签】>
【其他标签....】
</【布局标签】>
</Page>
WPF 和 XAML 命名空间声明
在许多 XAML 文件的根标记中的命名空间声明内,通常可看到两个 XML 命名空间声明。 第一个声明默认映射整个 WPF 客户端/框架 XAML 命名空间:
xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation”
第二个声明映射单独的 XAML 命名空间,(通常)将其映射到 x: 前缀。
xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml”
这些声明之间的关系是 x: 前缀映射支持作为 xaml 语言定义一部分的内部函数,而 WPF 是一种将 xaml 用作语言的实现,并为 xaml 定义了其对象的词汇。
CLR指的是公共语言运行库
体系结构
PresentationFramework.dll
包含WPF顶层的类型,包括哪些表示窗口、面板以及其他类型控件的类型。它还实现了高层编程抽象,如样式;开发中使用的大部分类都来自这个程序及;
PresentationCore.dll
包含基础类型,UIElement类和Visual,所有形状类和控件类都继承自这两个类;
WindowsBase.dll
包含更多基本要素,如DispatcherObject和DependencyObject类,这两个类引入了依赖属性;
milcore.dll
有时候称为“图形托管”引擎,是WPF渲染系统的核心,也是媒体集成层的基础;
类层次结构
DispatcherObject类
通过继承自该类,用户界面中的每个元素都可以检查代码是否在正确的线程上运行,并能通过访问调度程序,为用户界面现成封送代码。
DependencyObject类
通过继承该类,WPF类可以获得对依赖属性的支持。
Visual类
WPF窗口中显示的每个元素本质上都是Visual对象。可以该类视为绘图对象,其中封装了绘图指令、如何执行绘图的附加细节,如透明度、裁剪以及变换位置,以及基本功能(命中测试);该类还在托管的WPF库和渲染桌面的milcore.dll程序及之间提供了链接,任何继承自该类的类都能在窗口上显示出来。因此,可以直接对该类进行编程也可以创建轻量级的用户界面。
UIElement类
该类增加了对WPF本质特征的支持,如布局、输入、焦点、和事件。
FrameworkElement类
该类是WPF核心继承树种的最后一站,实现了一些全部由UIElement类定义的成员。例如,UIElement为WPF布局系统设置了基础,但FrameworkElement类提供了支持它的重要属性,如HorizontalAlignment和Margin属性;UIElement类还添加了对数据绑定、动画以及样式等核心功能的支持。
shape类
基本的形状类。
Control类
是可以与用户进行交互的元素,包括TextBox、Button、ListBox等,该类为设置字体以及前景色与背景色提供了附加属性,并且支持模板,在WPF中可视化的被称为元素,只有和用户交互的称为控件,Panel类是所有布局容器的基类,定义在Control类中,但是不被认为控件。
ContentControl类
是所有具有单一内容的空间的基类,包括简单的标签乃至窗口的所有内容,该空间中的单一内容可以是普通字符串乃至具有其他形状和空间组合的布局面板。
ItemsControl类
是所有显示选项集合的控件的基类,如ListBox和TreeView控件。
panel类
是所有布局容器的基类,布局容器是一个可以包含一个或多个子元素、并按特定规则对子元素进行排列的元素。