0
点赞
收藏
分享

微信扫一扫

CH01_WPF概述

耶也夜 2024-07-24 阅读 21
wpf

第1章:WPF概述

本章目标

  • 了解Windows图形演化
  • 了解WPF高级API
  • 了解分辨率无关性概念
  • 了解WPF体系结构
  • 了解WPF 4.5

WPF概述

Windows 图形演化

DirectX:新的图形引擎

注意:

硬件加速与 WPF

什么是WPF

WPF和Winform的区别

WPF : 高级API

分辨率无关性

WPF 单位

系统DPI

​ 这正是 WPF的不同之处。WPF 本身就可以十分轻松地支持系统 DPI 设置。例如,将系统
DPI 设置改为120dpi(高分辨率显示器的用户常选择这么做),WPF假定需要120个像素来填满
1英寸的空间。WPF使用以下公式计算如何将逻辑单位变换为物理设备像素:

[物理单位尺寸]=[设备无关单位尺寸]×[系统DPI]

​ =1/96英寸X120dpi
=1.25像素

​ 换句话说,将系统 DPI设为120dpi 时,WPF渲染引擎假定设备无关单位等于1.25个像素。
如果显示96×96像素大小的按钮,那么物理尺寸实际为120×120像素(因为96×1.25=120)。
这正是你所期望的结果—在标准显示器上大小为1英寸的按钮,在像素密度更高的显示器上仍保持1英寸的大小。

​ 如果只用于按钮,这种自动缩放的意义不大。但 WPF 对它所显示的任何内容都使用设备无关单位,包括形状、控件、文本以及其他放在窗口中的内容。所以可将系统 DPI 改为任何所希望的数值,WPF将无缝地调整应用程序的尺寸。

注意:

位图和矢量图形

​ 分辨率无关性的重要性无论如何强调都不过分。因为乍一看,对于这个由来已久的问题(该问题确实如此),它看起来像是简单的、优美的解决方法。但为了设计完全可缩放的用户界面,开发人员需要接受一种新的思想。

WPF 体系结构

类层次结构

1.System,Thieading.DispatcherObjeat类
WPF 应用程序使用为人熱知的单线程亲和(Single-ThreadAmipity,STA)模理,这意味着整个用户界面由单个线程拥有。从另一个线程与用户界面元素进行交互是不安全的。为方便使用此模型,每个WPF应用程序由协调消息(键盘输入、鼠标移动乃至框架处理,如布局)的调度程序管理。通过继承自 DispatcherOljoot 类,用户界面中的每个元素部可以检查代码是否在正确的线程上运行,并能通过访间调度程序为用户界面线程封送代码。

2.System.Windows.DependencyObject 类
在 WPF 中,主要通过属性与原幕上的元素进行交互。在早期设计阶段,WPF的设计者决定创建一个更加强大的属性模型,该模型文持许多特性,例如更改通知、歌认值继承以及被少翼桂存餚空间。最終结果就是依驗项属性(dependency properp)特性,第4章将分析该种性。
通过继承自 DependencyObject类,WPF类可获得对依赖项属性的支持。

3.System.Windows.Media.Visual 类
在 WPF 窗口中显示的每个元素本质上都是 Visual 对象。可将 Visual 炎视为绘图对象,其中封装了绘图指令、如何执行绘图的附加细节(如剪裁、透明度以及变换设置)以及基本功能(如命中测试)。Visual类还在托管的 WPF 库和谊染桌面的 milcore.dll程序集之间提供了链接。任何继承自 Visual 的类都能在窗口上显示出来。如果更愿意使用轻量级的 API 创建用户界面,而不想使用WPF 的高级框架特征。

  1. System.Windows.UlElement 类
    UIElement 类增加了对WPF 本质特征的支持,如布局、输入、焦点和事件(WPF 团队使用首字母缩写词 LIFE 来表示)。例如,这里定义两个步骤的测量和排列布局过程,这些内容将在第18章中介绍。在该类中,原始的鼠标单击和按键操作被转换为更有用的事件,如MouseEnter事件。与属性类似,WPF 实现了增强的称为路由事件(routed event)的事件路由系统。

5.System. Windows.FrameworkElement 类
FrameworkElement类是 WPF核心继承树中的最后一站。该类实现了一些全部由 UIElement类定义的成员。例如,UIElement 类为 WPF 布局系统设置了基础,但 FrameworkElement类提供了支持它的重要属性(如 HorizontalAlignment 和 Margin 属性)。UIElement类还添加了对数量綁定、动画以及样式等核心特性的支持。

6.System.Windows.Shapes.Shape 类
基本的形状类(如Rectangle 类、Polygon 类、Ellipse 类、Line类以及 Path 类)都继承自该类。
可将这些形状类与更传统的 Windows 小组件(如按钮和文本柜)结合使用。

  1. System.Windows.Controls.Control 类

控件(control)是可与用户进行交互的元案。控件显然包括 TextBox 类、Button 类和 ListBox类等。Contol 类为设置字体以及前景色与背景色提供了附加属性。但最令人感兴趣的细节是模板支持,通过模板支持,可使用自定义风格的绘图替换控件的标准外观。第17 章将介绍控件模板。

注意:

8.System.Windows.Controls.ContentControl 类
ContentControl 类是所有具有单一内容的控件的基类,包括简单的标签乃至窗口的所有内容。该模型给人印象最深刻的部分是:控件中的单一内容可以是普通字符串乃至具有其他形状和控件组合的布局面板。

9.System.Windows.Controls.ItemsControl 类
ItemsControl 类是所有显示选项集合的控件的基类,如 ListBox 和 TreeView 控件。列表控件十分灵活—例如,使用ItemsControl类的内置特征,可将简单的 ListBox 控件变换成单选按钮列表、复选框控件列表、平铺的图像或是您所选择的完全不同的元素的组合。实际上,WPF中的菜单、工具栏以及状态栏都是特定的列表,并且实现它们的类都继承自 ItemsContorl 类。
10.System.Windows.Controls.Panel 类
Panel 类是所有布局容器的基类,布局容器是可包含一个或多个子元素、并按特定规则对子元素进行排列的元素。这些容器是 WPF 布局系统的基础,要以最富有吸引力、最灵活的方式安排内容,使用这些容器是关键所在。

WPF 4.5

第一个WPF程序

1.新建项目

在这里插入图片描述

在这里插入图片描述

2.编写代码

在这里插入图片描述

3.运行程序

在这里插入图片描述

本章小结

本章简要介绍了WPF及其作用,分析了 WPF 的底层体系结构,并简要介绍了核心类。
显然,WPF 引入了许多重要变化。然而,有5条重要的准则更加突出,因为它们和以前的Windows 用户界面工具包(如Windows 窗体)的区别很大。这些准则如下:

硬件加速:

​ 通过 DirectX 执行所有WPF 绘图操作,以便充分利用现代显卡的最新功能。

分辨率无关性:

​ WPF能够根据系统 DPI 设置,非常灵活地放大和缩小显示的内容,以使其适合所用的显示器和显示选择。

控件无固定外观:

​ 在传统的Windows 开发中,在定制的符合需求的控件(此类控件是指自绘制的控件)和由操作系统渲染的本质上外观固定的控件之间存在很大的差别。在WPF 中,从基本的Rectangle 形状到标准的 Button控件或更复杂的 Toolbar控件,都是使用相同的渲染引擎绘制的,并且都是完全可定制的。因此,WPF 控件经常被称为无外观控件——它们为控件定义了功能,但没有固定“外观”。

声明式用户界面:

​ 第2章将介绍 XAML,XAML 是用于定义 WPF 用户界面的标记标准。通过 XANL,不必编写代码即可创建窗口。特别是 XAML 的能力不局限于创建一成不变的用户界面。可以使用许多工具,如数据绑定和触发器等自动运行基本的用户界面行为(例如,当页面通过记录源时文本框更新自身,当鼠标移动到标签上时标签变亮),所有这些都不需要编写 C#代码。

基于对象的绘图:

​ 即使准备在更低级的可视化层(而非高级元素层)上工作,也不需要使用绘图和像素进行工作,而是创建图形对象并让WPF 尽可能最优化地显示出来。

课后作业

举报

相关推荐

0 条评论