目录
1、窗口类
2、实现窗口
2.1 为 MSBuild 配置窗口
3、窗口生存期
3.1 打开窗口
3.2 窗口激活
3.3 关闭窗口
3.4 窗口生存期事件
4、窗口位置
4.1 最顶层窗口和 z 顺序
5、窗口大小
6、大小调整属性的优先级顺序
7、窗口状态
8、窗口外观
8.1 重设大小模式
8.2 Window style
8.3 任务栏显示
9、其他类型的窗口
用户通过窗口与 Windows Presentation Foundation (WPF) 应用程序交互。 窗口的主要用途是托管使数据可视化并使用户能够与数据交互的内容。 WPF 应用程序使用 Window
类提供自己的窗口。 本文先介绍
Window,然后讲述在应用程序中创建和管理窗口的基础知识。
本文使用从 C# 项目生成的 XAML。 如果使用 Visual Basic,则 XAML 看上去可能有不同。 这些差异通常出现在 x:Class
属性值上。 C# 包括项目的根命名空间,而 Visual Basic 不包括。
C# 的项目模板创建了一个 App
类型,包含在 app.xaml 文件中。 在 Visual Basic 中,该类型名为 Application
,该文件名为 Application.xaml
。
1、窗口类
在 WPF 中,窗口由用于执行以下操作的
Window 类封装:
- 显示窗口。
- 配置窗口的大小、位置和外观。
- 托管特定于应用程序的内容。
- 管理窗口的生存期。
下图展示了窗口的构成部分:
窗口分为两个区域:非工作区和工作区。
窗口的非工作区由 WPF实现,它包括大多数窗口所共有的窗口部分,包括:
- 标题栏 (1-5)。
- 图标 (1)。
- 标题 (2)。
- 最小化 (3)、最大化 (4) 和关闭 (5) 按钮。
- 包含菜单项的系统菜单 (6)。 单击图标 (1) 时出现。
- 边框 (7)。
窗口的工作区是窗口的非工作区内部的区域,由开发人员用于添加特定于应用程序的内容,例如菜单栏、工具栏和控件。
- 工作区 (8)。
- 大小调整手柄 (9)。 这是添加到工作区 (8) 的控件。
2、实现窗口
典型窗口的实现既包括外观又包括行为,外观定义用户看到的窗口的样子,行为定义用户与之交互时窗口的运行方式。 在 WPF 中,可以使用代码或 XAML 标记实现窗口的外观和行为。
但在一般情况下,窗口的外观使用 XAML 标记实现,行为使用代码隐藏实现,如以下示例所示。
<Window x:Class="WindowsOverview.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WindowsOverview"
>
<!-- Client area containing the content of the window -->
</Window>
下面的代码是 XAML 的代码隐藏。
using System.Windows;
namespace WindowsOverview
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
}
若要使 XAML 标记文件和代码隐藏文件配合工作,需要满足以下要求:
-
在标记中,
Window
元素必须包含x:Class
属性。 生成应用程序时,标记文件中存在x:Class
会使 Microsoft 生成引擎 (MSBuild) 生成派生自
Window 的partial
类,其名称由x:Class
属性指定。 这要求为 XAML 架构 (xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
) 添加 XAML 命名空间声明。 生成的partial
类实现InitializeComponent
方法,注册事件和设置在标记中实现的属性时将调用此方法。 -
在代码隐藏中,类必须是
partial
类、名称必须是标记中x:Class
属性指定的相同名称,并且它必须派生自
Window。 这样,代码隐藏文件就与应用程序生成时为标记文件生成的partial
类相关联。 -
在代码隐藏中,
Window 类必须实现调用InitializeComponent
方法的构造函数。InitializeComponent
由标记文件已生成的partial
类实现,用以注册事件并设置标记中定义的属性。
使用 Visual Studio 将新的 Window
添加到项目时,
Window 通过同时使用标记和代码隐藏实现,并且包括必要的配置来创建此处所述的标记文件和代码隐藏文件之间的关联。
进行了此配置后,可以专注于在 XAML 标记中定义窗口的外观,并可在代码隐藏中实现窗口的行为。 以下示例显示了一个窗口,该窗口中的一个按钮定义了
Click 事件的事件处理程序。 这是在 XAML 中实现的,处理程序是在代码隐藏中实现的。
<Window x:Class="WindowsOverview.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WindowsOverview"
>
<!-- Client area containing the content of the window -->
<Button Click="Button_Click">Click This Button</Button>
</Window>
下面的代码是 XAML 的代码隐藏。
using System.Windows;
namespace WindowsOverview
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button was clicked.");
}
}
}
2.1 为 MSBuild 配置窗口
实现窗口的方式决定为 MSBuild 配置窗口的方式。 对于使用 XAML 标记和代码隐藏定义的窗口:
- XAML 标记文件配置为 MSBuild
Page
项。 - 代码隐藏文件配置为 MSBuild
Compile
项。
.NET SDK 项目会自动导入正确的 Page
和 Compile
项,无需对其进行声明。 如果为 WPF 配置了项目,则会将 XAML 标记文件