Windows Presentation Foundation 初学者 FAQ
介绍
这篇文中通过常见的问题开始 WPF 之旅。我们从理解为什么使用 WPF 开始?为了更好的理解 WPF ,我们将使用 WPF 创建一个简单的“ Hello World ”项目。
已经有 GDI 、 GDI+ 和 DirectX 为什么还需要 WPF ?
首先,我们了解一下微软显示技术的发展。
![](http://www.dotnetspark.com/kbPicture/questpond_633709593138112464_1.jpg)
User32 : 它提供了窗体和按钮、文本框和其他 UI 元素的外观。 User32 缺乏绘制能力。
GDI ( Graphics Device Interface ): Microsoft 引入了 GDI 绘图功能。 GDI 不仅提供了绘图功能,而且在硬件显示上提供高水平抽象。换句话说,它封装了所有硬件复杂性到 GDI 的 API 。
GDI+ : GDI+ 被认为是 GDI 的扩展,提供了扩展功能像支持 JPG 和 PNG ,渐变阴影和图像保真。 GDI 的 API 最大的问题是它没有使用硬件加速,不支持动画和 3D 。
注意: 硬件加速过程中,我们使用硬件执行一些功能,而不是使用 CPU 上运行的软件来执行这些功能。
DirectX : GDI 和它的扩展 GDI+ 最大的问题是硬件加速和动画支持。这对于游戏开发者来说是最大的缺点。为了回应游戏服务开发者微软开发的 DirectX 。 DirectX 利用硬件加速支持 3D ,全彩图像,流媒体设备等。当它进入游戏产业时这个 API 还不成熟。
WPF : 微软已经有 3 、 4 个显示技术的 API ,那为什么好需要多一个显示技术呢。 DirectX 显著特点是使用硬件加速。微软希望能利用硬件加速技术开发像文本框、按钮、表格等 UI 元素。 WPF 标准是在 DirectX 之上的,你不仅可以使用它创建简单的 UI 元素也可以进一步开发特殊像 Grid 、 FlowDocument 、 Ellipse 等 UI 元素。你也可以进一步创建动画。 WPF 并不是为了游戏开发。 DirectX 仍然将引领游戏开发。如果你在寻找动画开发的道路(而不是游戏编程) WPF 将是一个选择。你可以使用 XML 表示 WPF ,也被称为 XAML 。换句话说 WPF 是建立在 DirectX 上的包装。因此,让我们来定义 WPF 。
![](http://www.dotnetspark.com/kbPicture/questpond_633709593740143714_2.jpg)
WPF 是一个简化建立动态用户界面类的集合。这些类包括一系列新的空间,一些模拟旧的 UI 元素(例如, Label 、 TextBox 、 Button ),和一些新 UI 元素(例如, Grid 、 FlowDocument 和 Ellipse )。
使用 WPF 如何进行硬件加速 ?
硬件加速过程是使用硬件执行一些功能,而不是使用运行在 CPU 上的软件来执行这些功能。
![](http://www.dotnetspark.com/kbPicture/questpond_633709594746862464_3.jpg)
WPF API 首先使用量视频卡的内存,像素值等参数检测硬件加速的级别。根据渲染模式分为 0 级、 1 级和 2 级。
Tier 0: - 如果视频卡不支持硬件加速, WPF 使用 0 级渲染模式。换句话说,使用软件加速。相当于 DirectX 7.0 以前版本。
Tier 1: - 如果视频卡支持部分硬件加速, WPF 使用 1 级渲染模式。 相当于 DirectX7.0 和 9.0 之间的版本。
Tier 2: - 如果视频卡支持硬件加速, WPF 使用 2 级渲染模式模式。 相当于 DirectX9.0 及更高版本。
是否意味着 WPF 可以代替 DirectX ?
有一点需要记住 WPF 是代替 Windows 形式而不是 DirectX 。
我们可能给 WPF 一个确定的定义?
Windows Presentation Framework 是新的显示 API 。 WPF 是二维和三维图形引擎。它具有以下功能:
能否解释 WPF 整体架构?
![](http://www.dotnetspark.com/kbPicture/questpond_633709595113737464_4.jpg)
DirectX: - 正如前面所说的 WPF 使用内部 DirectX 。 DirectX 与驱动交互。
Milcore: - Mil 表示媒体集成库。这部分是非托管代码因为它充当着托管 WPF 和非托管 DirectX / User32 API 之间的桥梁。
Presentation core :- 这部分是暴露给 WPF 低层次的 API 提供了 2D 、 3D 和几何等特性。
Presentation framework:- 这部分是想应用控件、布局等高层次特性。这些内容帮助建立应用程序。
WPF 中有那些命名空间?
![](http://www.dotnetspark.com/kbPicture/questpond_633709595662956214_5.jpg)
System.Threading.DispatcherObject
System.Windows.DependencyObject
WPF 认为是基于框架的属性设计。换言之,使用使用属性而不是对象的方法、事件等行为进行交互。现在我们仅限于这个定义。
![](http://www.dotnetspark.com/kbPicture/questpond_633709595969049964_6.jpg)
UIElement 执行三个重要方面 – 布局、输入和事件。
System.Windows.FrameworkElement
FrameWorkElement 以 UIElement 为基础。它添加了 HorizontalAlignment 、 VerticalAlignment 、 margins 等关键属性。
这个类帮我们创建像矩形、多边形、椭圆形、线和路径等基本图形。
System.Windows.Controls.Control
这个类有像 TextBox 、 Button 、 ListBox 等控件。它添加了一些像字体、前景色和背景色等属性。
System.Windows.Controls.ContentControl
它拥有单一的内容。它可以包括从简单的标签到使用形状的布局面板级。
System.Windows.Controls.ItemsControl
是所有显示项集合的类的基类,例如 ListBox 和 TreeView 。
这个类用于所有布局容器元素包含一个或多个子元素并按一定的布局规则安排他们。这些容器是 WPF 布局系统的基础,使用它们能更有吸引力、灵活的布局内容。
什么是 XAML ?
因此, XAML 是一个 XML 文档用于定义对象和属性并有 WPF 在实际内存中加载这些文档。
那么,是否意味着 XAML 仅供 WPF 使用呢 ?
不, XAML 不只是供 WPF 使用。 XAML 是基于 XML 的语言,是 XML 的变体。
WPF 的 XAML 是用于描述 WPF 内容,例如 WPF 对象、控件和文档。在 WPF 中的 XAML 也有定义一个 XML 表示的电子文档的 XPS 的 XAML 。
WWF 的 XAML 并于描述 Windows Workflow Foundation 的内容。 WWF 引擎使用这种 XAML 调用相应的工作流。
能否解释 WPF 应用程序涉及的各种元素?
为了理解 WPF 中的不同元素,我们将做一个小的 “ hello world ”示例,在这个过程中将理解 WPF 中不同的元素。
注意:这个示例我们使用 VS 2008 Express Edition 。
因此,打开 VS 2008 Express 并从模板中选择 WPf 应用程序如下图所示。
![](http://www.dotnetspark.com/kbPicture/questpond_633709596370924964_7.jpg)
![](http://www.dotnetspark.com/kbPicture/questpond_633709596572956214_8.jpg)
现在我们连接到 XAML 文件元素的后置代码中事件中的方法。
![](http://www.dotnetspark.com/kbPicture/questpond_633709596976706214_10.jpg)
可以从上面的代码段中看出,按钮元素点击事件是如何连接到“ MyButton_Click ”方法。“ MyButton_Click ”是定义在后置代码 XAML.CS 中的方法。
如果运行这段代码可以看到一个按钮,如果点击它可以看到一个消息框,如下图所示。
![](http://www.dotnetspark.com/kbPicture/questpond_633709597150456214_11.jpg)
什么是依赖属性?
<Rectangle Height="72" Width="131" Canvas.Left="74" Canvas.Top="77" />
高和宽是矩形常规的属性。但 Canvas.Top 和 Canvas.Left 是依赖属性,是属于 Canvas 类的。用在矩形中指定进行在 Canvas 中的位置。
XAML 文件是译还是运行时创建的?
能否解释如何拆分代码和 XAML ?
从代码中将 XAML 分离出来执行是 WPF 中一个重要特征。因此,设计人员能够独立设计应用程序的节目,开发人员可以编写实现功能的逻辑代码。
![](http://www.dotnetspark.com/kbPicture/questpond_633709597328424964_12.jpg)
在后置代码中如何访问 XAML 对象?
在后置代码中访问 XAML 对象需要定义它们和 XAML 文档中名字相同。例如下面代码段定义了一个名为 objtext 对象并且在后置代码中也定义相同的名字。
![](http://www.dotnetspark.com/kbPicture/questpond_633709597495768714_13.jpg)
什么样的文档支持 WPF ?
支持 WPF 有两类主要的格式,固定格式文档和流格式文档。固定格式文档看起来像 PDF 格式。它们显示内容不管屏幕大小和分辨率。但流格式文档根据屏幕大小和分辨率进行调整。
下面是固定格式的代码段。可以看到文档外观像 PDF 阅读器。第一步定义文档标签,第二部显示文档外观。
![](http://www.dotnetspark.com/kbPicture/questpond_633709597854987464_14.jpg)
Windows Presentation Foundation 初学者 FAQ相关推荐
- Windows Presentation Foundation(介绍外连接)
Windows Presentation Foundation 2011/08/12 更新:2010 年 12 月 Windows Presentation Foundation (WPF) 为开发人 ...
- Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...
- Windows Presentation Foundation (WPF)中的命令(Commands)简述
Windows Presentation Foundation (WPF)中的命令(Commands)简述 原文:Windows Presentation Foundation (WPF)中的命令(C ...
- 演练:在 Windows 窗体中承载 Windows Presentation Foundation 复合控件 【转载】
http://msdn.microsoft.com/zh-cn/library/ms745781.aspx 更新:2007 年 11 月 本演练演示如何创建 WPF 复合控件,并通过使用 Elemen ...
- Windows Presentation Foundation 开始介绍
This portal provides links to information intended for developers that are new to Windows Presentati ...
- WPF(Windows Presentation Foundation)用户界面框架
WPF(Windows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的编程模 ...
- Windows Presentation Foundation 用户指南
Microsoft Windows Presentation Foundation(以前的代号称为"Avalon")为构建高度投入,且在视觉效果上与众不同的应用程序提供了一个集成的 ...
- Windows Presentation Foundation 巡游
发布日期: 11/10/2005 | 更新日期: 11/10/2005 Tim Sneath Microsoft Corporation 适用于: WinFX Runtime Components S ...
- Implementing the 3DVIA Composer Player ActiveX in Windows Presentation Foundation
2019独角兽企业重金招聘Python工程师标准>>> In this post I want to address a technological issue related to ...
最新文章
- Bitmap too larget to be uploaded into a texture的解决方法
- PDF转换图片,图片的切割,图片转换PDF以及PDF加水印等记录贴
- 以太坊智能合约简介(Solidity)
- 【定区管理功能】定区列表分页条件查询
- 关于8位AD_DA转换芯片的采样率问题
- 大学留级两年不敢和家人说_您说什么:如何与家人保持联系?
- 二叉排序树删除子节点以及遍历
- 几种php 删除数组元素方法
- Java笔记-DH密钥交换获取密钥及AES加解密
- JDBC模板对象是多例的
- linux0.11中断描述符,Linux 0.11总结
- (转)关于中国的互联网
- 运动目标跟踪(五)--搜索算法预测模型之PF,KF,EKF,UKF比较总结
- Apache基本设置
- JAVA 注解示例 详解
- 来给PPT添加一个进度条和页码吧
- lora与NB-IoT无线通讯技术在消防产品上的应用-lora烟感/NB烟感
- 讯图科技数据网关解决方案
- 【python】filetype根据内容推测文件类型
- 业务数据分析最佳案例!旅游业数据分析!⛵
热门文章
- 妙用Java 8中的 Function接口,消灭if...else(非常新颖的写法)
- 活动回顾 谷露招聘沙龙VOL.6 解锁校招人才获取新玩法
- Hyperledger Fabric 1.0 快速搭建 -------- 多机部署 Fabric CA节点服务
- 【Crash】C++程序崩溃排查方法
- 大学生实习就业调研报告:8个共性问题与企业CTO/CEO/HR管理者探讨
- python数字1 3怎么表示_Python3数据类型之数字
- 123部奥斯卡影片名称中英文对照
- faithful原版高清java_我的世界Faithful材质包下载【1.6-1.8.x】【32x/64x】
- 语音库构建_在10分钟内构建一个多功能语音助手
- 初级开发和中级,高级的区别_如何从初级开发人员过渡到中级开发人员