WPF(1)开始教程[译]

时间:2021-07-04 02:26:57

在我使用了半年多 WPF 后,是时候写点关于 WPF 根本方面的对象了。我发表了一系列针对具体问题的文章。此刻是到了让大家大白为什么说WPF是一款在界面开发上带来革命的产品了。

本文针对低级-中级措施员,所以我尽量给出一些根本的示例。

WPF 介绍

WPF(1)开始教程[译]

就像名字暗示的那样(WPF:Windows Presentation Foundation 直译为 Windows 图像根本),WPF是在 .NET Framework 3.0 引进的一个新框架,包罗了很多可以更快速和便利地编写措施的类库。它使用了 Direct3D 技术来泛起界面。由于丰裕操作了机器硬件的优势,所以界面越发平滑。如果只能使用传统的 GDI 技术,就不能使用如此多的高级图形特性,所以 Windows Form 经常是效率低下的。此外: Windows Form 使用了操纵系统原生的组件来创建措施,这样极大地限制了开发人员的自界说能力。 WPF 组件实际上是画在屏幕上的,所以在有须要的时候可以非常便利地进行自界说。

WPF 特性

WPF 带来了非常多的高级特性,下面我们来看一些:

设备独立的像素控制(DPI)

WPF 引入了对措施的 DPI 设置。对一个窗口来说,计算屏幕上的每一英寸能容纳几多像素长短常重要的。这个凡是依赖操纵系统和硬件撑持。任何用户都可以很容易地改削这些设置,这样导致了措施看起来非常丑恶。 Windows Form 措施使用 DPI 来控制措施的像素,每个控件都可以转变它的尺寸和外不雅观。

WPF 独立于 DPI 的设置。下面我们来看一个示例:

WPF(1)开始教程[译]

假设你画了一个上图中那样的盒子,1英寸长,屏幕设置为 96DPI 。此刻如果屏幕设置为 120DPI ,盒子将看起来变小了。这是因为 Windows Form 措施依赖 DPI 设置。

WPF 使用了基于密度的要领,意思就是如果像素密度改削了,元素也会自动调解,这就是 DIP (依赖设备)。如上图中看到的那样,如果 DPI 变高,盒子将使用更多的像素来连结同样的巨细。

内置的对图形和动画的撑持

WPF 措施使用 DirectX 进行衬着,这是一种主要用来撑持图形显示和动画能力的技术。一些独立的类库用来进行图形和动画措置惩罚惩罚。画出来的图形都是矢量的并且面向东西的。意思就是:如果在 WPF 中画一个矩形,可以很容易地从措施中通过持有的引用把这个矩形给移除去。在传统的 Windows 措施中,一旦你画了一个矩形,你就不能再单独选中这个矩形了。 WPF 使用的方法与传统的方法有非常大的差异。我们将在文章的后面更详细地讨论图形和动画。

从头界说了气势派头和控件模板

除了图形和动画成果, WPF 带来了极其灵活的气势派头和模板界说。如果你了解 CSS 技术,你应该知道样式是一个规定组件如何泛起的界说调集。如果是传统的 Windows Form 措施,气势派头设置被紧紧地绑定在每一个组件上,你必需要为每一个控件单独界说颜色,气势派头等。当使用 WPF ,气势派头文件是完全独立于 UI 组件的,一旦你界说了一种气势派头,你很简单地就可以把它用在元素上。

我们经常使用多个根基的控件来组成组件。 WPF 引入了一种新的模板机制可以让我们用来从头界说组件。举个例子,你界说了一个有一个矩形框和一个标题的复选框 。使用 WPF 的模板,你可以从头界说将单选框放入到复选框中,这样就是圆形的选择按钮而不是矩形的。非常有意思。我们将在后文单独使用一节来讲解气势派头和模板。

每个控件都是基于资源的

此外一个重要的特性是: WPF 是基于资源的。在传统的 Windows Form 措施中,界说气势派头长短常庞大的。如果你有 1000 个按钮,你想让每一个按钮都是金色的,你不得不创建 1000 个 Color 东西并应用到每一个按钮上,这样将导致很大的资源消耗。

在 WPF 中,可以存储每一个气势派头,控件,动画甚至东西为资源。这些资源只有在措施启动的时候会初始化一遍,然后就可以使用到组件上。你可以把这些资源维护到一个单独的叫做资源字典的文件中,这样整个措施都可以使用。所以 WPF 措施可以很好的应用主题。

新的属性系统和绑定成果

下面我必需得介绍一下 WPF 引入的新的属性系统。每个 WPF 的元素都界说了大量的依赖属性。这些依赖属性对比传统的属性有非常强的能力。当我界说我本身的新的属性的时候,我可以很容易地注册这个属性到任何我想注册的东西上。这样就可以添加到同一个不雅察看者。因为每个元素都是派生自 DependencyObject ,所以每个元素包罗了 Dependency Observer 。一旦你注册了一个属性作为依赖属性,在不雅察看者上就会创建一个空间并且生存属性的值。我们将在本系列文章的后面越发详细地讨论这个问题。

什么是XAML?