关于 WPF 你应该知道的 2000 件事(四)

13 篇文章 5 订阅

WPF 开发人员需要知道的一切

31 – UIElement 类

UIElement 类继承自 Visual 并添加了对基本用户交互行为的支持,包括:

  • 布局行为
    • 亲子关系
    • 测量/安排通过
  • 响应用户输入
    • 来自键盘/鼠标等设备的输入事件
    • 命令绑定
  • 管理焦点
  • 引发(并响应)路由事件
    • 事件冒泡(向上)或隧道(向下)元素树

32 – 框架元素(FrameworkElement)

FrameworkElement 类继承自 UIElement,反过来又是 WPF 中所有控件的父类。

FrameworkElement 基于 UIElement 构建并添加了以下功能:

  • 布局 – 通过实现 Horizo​​ntalAlignment、MinWidth 和 Margin 等属性来实现布局模型
  • 通过 BeginStoryboard 方法支持动画
  • 数据绑定
  • 样式

FrameworkElement 也是将添加到逻辑树(构成用户界面的可视对象的层次结构)的对象的主要基类。

33 – Control 类

Control 类继承自 FrameworkElement,是用户与之交互的所有控件的基类。控件的示例包括:TextBox、Label、ListBox、ComboBox 和 Button。 Panel 和 Grid 等容器元素不是控件。

Control 类通过添加以下功能来扩展 FrameworkElement:

  • 通过使用模板更改控件的视觉外观
  • 支持字体、边框和背景颜色等视觉元素

34 – ContentControl

内容控件是一类控件,可以容纳单个嵌套元素,该元素表示其内容。由于嵌套元素可以是任何内容,从 ContentControl 派生的控件可以存储各种不同类型的内容。

内容控件有一个 Content 属性,它指向它们包含的单个元素。该元素通常是 UIElement,但可以是任何 .NET 对象。

这是一个示例,CheckBox 使用 DatePicker 作为其内容。

<CheckBox Height="31" HorizontalAlignment="Center" Name="checkBox1" VerticalAlignment="Center">
    <DatePicker Name="datePicker1"  />
</CheckBox>

在这里插入图片描述
请注意,由于 Window 类是一个内容控件,因此一个 Window 可能只有一个子元素。

通过将单个容器对象作为其内容包含在内,您可以有效地在内容控件中包含一组控件,该容器对象又包含其他元素。 (例如,一个 Button 可以包含一个 StackPanel,然后它会包含其他元素)。

35 – ItemsControl

ItemsControl 是另一个 WPF 类,它继承自 Control 并用作其他控件的基类。从 ItemsControl 继承的控件显示项目的集合。

从 ItemsControl 派生的控件通常使用数据绑定获取要显示的项目列表,绑定到实现 IEnumerable 的对象。

直接或间接从 ItemsControl 继承的控件包括:Menu、ContextMenu、ComboBox、ListBox、ListView、TabControl、DataGrid、StatusBar、ToolBar 和 TreeView。

36 – 五种类型的 WPF 应用程序

您可以开发五种主要类型的 WPF 应用程序:

  • 独立应用程序 - 标准窗口客户端应用程序,在 Windows 上运行
  • XAML 浏览器应用程序 (XBAP) – 在浏览器中运行的基于页面的应用程序
  • 自定义控件库 - 包含从 Control 派生的自定义控件的库,打包为 DLL
  • 用户控件库 - 包含从 UserControl 派生的自定义控件的库,打包为 DLL
  • 类库 - 包含可用于其他项目的通用类的库,打包为 DLL

37 – 选择目标版本的 .NET Framework

默认情况下,当您使用 Visual Studio 2010 构建 WPF 应用程序时,您的目标是 .NET Framework 4 Client Profile。客户端配置文件是完整的 .NET Framework 4 的子集,其中仅包含 Windows 客户端应用程序通常需要的部分。例如,它不包括对 ASP.NET 应用程序的支持。

可以通过查看“项目属性”窗口的“应用程序”选项卡来验证或更改 WPF 项目面向的框架版本。在这里插入图片描述
您可以更改您的项目以面向较旧版本的 .NET Framework。如果您的应用程序不需要较新版本的框架中存在的功能,并且您希望部署到已安装较旧版本的系统,避免下载较新版本的框架,则您可以这样做。

38 – 应用程序类

Application 是一个类,它表示在 Windows 中作为独立客户端应用程序运行的 WPF 应用程序。每个正在运行的应用程序最多包含一个 Application 实例。

使用 Visual Studio 2013 新建项目向导创建的 WPF 应用程序将在 App.xaml 文件中包含 Application 对象的定义。

<Application x:Class="WpfApplication9.App"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     StartupUri="MainWindow.xaml">
   <Application.Resources>

   </Application.Resources>
</Application>

Application 对象负责:

  • 管理应用程序生命周期(例如响应启动/关闭事件)
  • 窗口、财产和资源管理
  • 命令行处理
  • 导航

39 – 窗口类

Window 类表示 WPF 中的一个窗口。它派生自 ContentControl,这意味着它可以包含表示其内容的单个嵌套元素。它直接从 Control 继承,并间接从 FrameworkElement、UIElement、Visual、DependencyObject 和 DispatcherObject 继承。

窗口在视觉上由客户区(窗口内部)和非客户区(标题栏、框架和最小化/最大化/关闭按钮)组成。它表示用户与 WPF 独立应用程序交互的主要(外部)视觉元素。

可以通过 Activate、Close、Hide 和 Show 等方法以及 Activated、Closed、Closing 和 Deactivated 等事件来管理窗口的生命周期。
以下 XAML:

<Window x:Class="WpfApplication9.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 Title="MainWindow" Height="200" Width="250">
    <Grid>
        <Label Content="I'm a WPF Window!" Height="28" HorizontalAlignment="Center" VerticalAlignment="Center" />
    </Grid>
</Window>

运行时在此窗口中的结果:
在这里插入图片描述

40 – 应用程序生命周期

下图显示了 WPF 应用程序生命周期的简化视图,由 Application 类触发的事件定义。 (事件有下划线)。单击图表可查看全尺寸版本。在这里插入图片描述
从 Application 触发的主要事件包括:

  • 启动 - 应用程序正在启动。
  • 退出 - 当应用程序关闭时触发。关机不能取消。
  • Activated – 当应用程序获得焦点时触发,即成为前台应用程序
  • 停用 - 当应用程序失去焦点时触发,即不再是前台应用程序
  • DispatcherUnhandledException – 在抛出异常但尚未处理时触发。您可以选择是否处理异常
  • SessionEnding – 由于注销或 Windows 关闭而关闭 Windows 时触发。您可以取消关机序列。

您可以通过覆盖应用程序派生类中的 OnEventName 方法来为这些事件中的任何一个添加自定义代码,例如在启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cool2Feel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值