Windows Presentation Foundation 初学者 FAQ

来源:互联网 发布:3d桌面软件 编辑:程序博客网 时间:2024/06/06 00:16

介绍

这篇文中通过常见的问题开始WPF之旅。我们从理解为什么使用WPF开始?为了更好的理解WPF,我们将使用WPF创建一个简单的“Hello World”项目。

已经有GDIGDI+DirectX为什么还需要WPF

首先,我们了解一下微软显示技术的发展。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

User32它提供了窗体和按钮、文本框和其他UI元素的外观。User32缺乏绘制能力。

GDIGraphics Device Interface):Microsoft引入了GDI绘图功能。GDI不仅提供了绘图功能,而且在硬件显示上提供高水平抽象。换句话说,它封装了所有硬件复杂性到GDIAPI

GDI+GDI+被认为是GDI的扩展,提供了扩展功能像支持JPGPNG,渐变阴影和图像保真。GDIAPI最大的问题是它没有使用硬件加速,不支持动画和3D

注意:硬件加速过程中,我们使用硬件执行一些功能,而不是使用CPU上运行的软件来执行这些功能。

DirectXGDI和它的扩展GDI+最大的问题是硬件加速和动画支持。这对于游戏开发者来说是最大的缺点。为了回应游戏服务开发者微软开发的DirectXDirectX利用硬件加速支持3D,全彩图像,流媒体设备等。当它进入游戏产业时这个API还不成熟。

WPF微软已经有34个显示技术的API,那为什么好需要多一个显示技术呢。DirectX显著特点是使用硬件加速。微软希望能利用硬件加速技术开发像文本框、按钮、表格等UI元素。WPF标准是在DirectX之上的,你不仅可以使用它创建简单的UI元素也可以进一步开发特殊像GridFlowDocumentEllipseUI元素。你也可以进一步创建动画。WPF并不是为了游戏开发。DirectX仍然将引领游戏开发。如果你在寻找动画开发的道路(而不是游戏编程)WPF将是一个选择。你可以使用XML表示WPF,也被称为XAML。换句话说WPF是建立在DirectX上的包装。因此,让我们来定义WPF

 

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

WPF是一个简化建立动态用户界面类的集合。这些类包括一系列新的空间,一些模拟旧的UI元素(例如,LabelTextBoxButton),和一些新UI元素(例如,GridFlowDocumentEllipse)。

使用WPF如何进行硬件加速

硬件加速过程是使用硬件执行一些功能,而不是使用运行在CPU上的软件来执行这些功能。

WPF利用硬件加速有两层方式。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

WPF API首先使用量视频卡的内存,像素值等参数检测硬件加速的级别。根据渲染模式分为0级、1级和2级。

Tier 0: - 如果视频卡不支持硬件加速,WPF使用0级渲染模式。换句话说,使用软件加速。相当于DirectX 7.0 以前版本。

Tier 1: - 如果视频卡支持部分硬件加速,WPF使用1级渲染模式。相当于DirectX7.09.0之间的版本。

Tier 2: - 如果视频卡支持硬件加速,WPF使用2级渲染模式模式。相当于DirectX9.0及更高版本。

是否意味着WPF可以代替DirectX

不,WPF没有替代DirectX。做尖端游戏仍然需要DirectXDirectX执行视频性能比WPF API高很多倍。因此,当涉及到游戏开发时总是使用DirectX而不是WPF。开发游戏WPF不是最佳的解决方法,但可以开发一些像TICTAC TOE等动画效果不高的游戏。

有一点需要记住WPF是代替Windows形式而不是DirectX

我们可能给WPF一个确定的定义?

Windows Presentation Framework是新的显示APIWPF是二维和三维图形引擎。它具有以下功能:

l  具有所有像按钮、复选框等普通用户控件。

l  固定和流动的文档格式。

l  具有HTMLFlash的所有功能。

l  支持2D3D矢量图。

l  动画功能。

l  多媒体功能。

l  数据绑定。

能否解释WPF整体架构?

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

上述图形显示WPF整体架构。它有三个核心部分Presentation核心,Presentation框架和milcore。在同一图中显示了其他部分如何直接和操作系统交互。所有,一段一段的去了解每段的工作。

User32: - 决定显示在屏幕上的位置。

DirectX: - 正如前面所说的WPF使用内部DirectXDirectX与驱动交互。

Milcore: - Mil表示媒体集成库。这部分是非托管代码因为它充当着托管WPF和非托管DirectX /User32 API之间的桥梁。

Presentation core :- 这部分是暴露给WPF低层次的API提供了2D3D和几何等特性。

Presentation framework:- 这部分是想应用控件、布局等高层次特性。这些内容帮助建立应用程序。

WPF中有那些命名空间?

这里显示了WPF中有十个重要的命名空间/类。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

System.Threading.DispatcherObject

所有WPF对象都是从DispatcherObject继承而来。WPF工作在STA模式上即单线程单元模式。这个对象主要任务是处理并发和线程。任何像鼠标点击、按钮点击等消息初始化后被发送到DispatcherObject确认代码是否允许在当前线程。接下来的部分将研究WPF线程工作的细节。

System.Windows.DependencyObject

WPF认为是基于框架的属性设计。换言之,使用使用属性而不是对象的方法、事件等行为进行交互。现在我们仅限于这个定义。

System.Windows.Media.Visual

Visual类是绘图对象,是画图指令和画像裁剪、图像透明度等其他功能的抽象类。Visual类充当非托管MilCore.dll和土管WFP类的桥梁。任何从Visual继承的类都能在窗体上显示。如果创建自定义界面可以在程序中使用那个Visual对象。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

System.Windows.UIElement

UIElement执行三个重要方面 布局、输入和事件。

System.Windows.FrameworkElement

FrameWorkElementUIElement为基础。它添加了HorizontalAlignment VerticalAlignment margins等关键属性。

System.Windows.Shapes.Shape

这个类帮我们创建像矩形、多边形、椭圆形、线和路径等基本图形。

System.Windows.Controls.Control

这个类有像TextBoxButtonListBox等控件。它添加了一些像字体、前景色和背景色等属性。

System.Windows.Controls.ContentControl

它拥有单一的内容。它可以包括从简单的标签到使用形状的布局面板级。

System.Windows.Controls.ItemsControl

是所有显示项集合的类的基类,例如ListBoxTreeView

System.Windows.Controls.Panel

这个类用于所有布局容器元素包含一个或多个子元素并按一定的布局规则安排他们。这些容器是WPF布局系统的基础,使用它们能更有吸引力、灵活的布局内容。

什么是XAML

XAML(发音Zammel)是一种基于XML的语言,可以在XML中都有对象和属性。XAML文档是由XAML分析器加载的。XAML解析器实例化对象并设置他们的属性。XAML描述对象、属性以及他们之间的关系。使用XAML可以创建任何对象包括图形对象和非图形对象。WPF解析XAML文档,根据XAML的定义实例化对象并创建XAML中定义的关系。

因此,XAML是一个XML文档用于定义对象和属性并有WPF在实际内存中加载这些文档。

那么,是否意味着XAML仅供WPF使用呢

不,XAML不只是供WPF使用。XAML是基于XML的语言,是XML的变体。

WPFXAML是用于描述WPF内容,例如WPF对象、控件和文档。在WPF中的XAML也有定义一个XML表示的电子文档的XPSXAML

Silverlight应用程序使用的SilverlightXAMLWPFXAML的一个子集。Silverlight是跨平台浏览器插件帮助创建富客户端内容包括2D图形、动画、音频和视频。

WWFXAML并于描述Windows Workflow Foundation的内容。WWF引擎使用这种XAML调用相应的工作流。

能否解释WPF应用程序涉及的各种元素?

为了理解WPF中的不同元素,我们将做一个小的hello world”示例,在这个过程中将理解WPF中不同的元素。

注意:这个示例我们使用VS 2008 Express Edition

因此,打开VS 2008 Express并从模板中选择WPf应用程序如下图所示。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

一旦我们创建了WPF应用程序项目,你可以看到两个文件类型,一个是XAML文件,一个是后置代码即.XAML.csXAML并没有其他是XML文件包含显示在Windows UI上的所有所需的元素。每个XAML元素对应于类。例如,在XAML文件中的“Window”元素对应于“WpfApplication.Window1”类,在XAML文件中的“Button”元素对应于“System.Windows.Control.Button”类,在XAML文件中的“GridXAML元素对应于“System.Windows.Control.Grid”类。

 App.XAML”和“App.XAML.CS”是入口文件。如果看到“App.XAML.CS”代码,将看到一个需要加载的XAML的引用。因为,在应用程序中首先运行的是“App.XAML.CS”中的代码“void Main()”方法,加载“Window1.XAML”文件。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

现在我们连接到XAML文件元素的后置代码中事件中的方法。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

可以从上面的代码段中看出,按钮元素点击事件是如何连接到“MyButton_Click”方法。“MyButton_Click”是定义在后置代码XAML.CS中的方法。

如果运行这段代码可以看到一个按钮,如果点击它可以看到一个消息框,如下图所示。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

什么是依赖属性?

依赖属性属于一个类但可以被另一个类使用。

看下面代码:

<RectangleHeight="72" Width="131" Canvas.Left="74"Canvas.Top="77" />

高和宽是矩形常规的属性。但Canvas.TopCanvas.Left是依赖属性,是属于Canvas类的。用在矩形中指定进行在Canvas中的位置。

XAML文件是译还是运行时创建的?

XAML文件通常是编译而不是运行时解析。当运行基于XAML的项目时,可以看到它在obj/Debug文件夹中创建一个g.cs扩展文件。因此,对美国XAML文件都将找到一个g.cs文件。例如,Shiv.XAMLobj/Debug文件夹中有一个Shiv.g.cs文件。总而言之,在运行时,实际上是看不到XAML文件的。如果想在运行时,解析XAML文件也是允许的。

能否解释如何拆分代码和XAML

从代码中将XAML分离出来执行是WPF中一个重要特征。因此,设计人员能够独立设计应用程序的节目,开发人员可以编写实现功能的逻辑代码。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

XAML和后置代码

上面代码显示XAML文件和代码从XAML示例中分离。为了关联XAML文件的类需要指定x:Class属性。在XAML对象中任何事件可以通过定义具有发送者和事件值的方法来关联。可以从上面代码段看到连接MyClickEvent到后置代码中的一个事件。

在后置代码中如何访问XAML对象?

在后置代码中访问XAML对象需要定义它们和XAML文档中名字相同。例如下面代码段定义了一个名为objtext对象并且在后置代码中也定义相同的名字。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家

访问XAML对象

什么样的文档支持WPF

支持WPF有两类主要的格式,固定格式文档和流格式文档。固定格式文档看起来像PDF格式。它们显示内容不管屏幕大小和分辨率。但流格式文档根据屏幕大小和分辨率进行调整。

下面是固定格式的代码段。可以看到文档外观像PDF阅读器。第一步定义文档标签,第二部显示文档外观。

Windows Presentation Foundation 初学者 FAQ - 夜晚回家 - 夜晚回家 

文档浏览器

原创粉丝点击