WPF使用WindowChrome类自定义标题栏

概览:

WindowChrome Class

注解

WindowChrome类使你能够将 Windows Presentation Foundation (WPF) 内容扩展到通常为操作系统的窗口管理器保留一个窗口非工作区。

标准Windows

标准 windows 由两个重叠的矩形构成。 外部矩形非工作区,这通常称为chrome。 它的绘制和操作系统的窗口管理器管理。 其维度取决于标准操作系统设置。 非客户端框架提供了标准的窗口功能和行为。 其中包括标题按钮 (最小化、 最大化,并关闭),窗口边框,调整大小和移动行为、 应用程序图标和标题和系统菜单。 内部矩形工作区。 它包含应用程序的内容和它的绘制和管理应用程序。 有关 WPF 应用程序中的 windows 的详细信息,请参阅WPF Windows 概述

下图显示了标准的窗口的各个部分。

自定义 Windows

可以通过设置自定义窗口边框Window.WindowStyle属性设置为None或使用WindowChrome类。

WindowStyle.None

自定义 WPF 应用程序窗口的外观的一种方法是设置Window.WindowStyle属性设置为None。 这从窗口中删除非客户端框架,并使仅客户端区域中,可以将自定义样式应用到其中。 但是,当删除非客户端框架时,您还丢失了系统功能和行为,它提供了标题按钮和重设窗口大小等。 另一个副作用是最大化窗口,将介绍 Windows 任务栏。设置WindowStyle.None,可创建完全自定义应用程序,但还需要在应用程序来模拟标准窗口行为中实现自定义逻辑。

WindowChrome

若要自定义窗口,同时保留其标准功能,可以使用WindowChrome类。 WindowChrome类将窗口框架的功能分隔开来从视觉对象,并允许您控制的客户端和应用程序窗口的非工作区之间的边界。 WindowChrome类,可以将 WPF 通过扩展客户端区域以覆盖非客户端区域窗口框架中的内容。 同时,它将保留两个不可见区域; 通过系统行为调整大小边框标题区域。

有两个主要部件创建自定义窗口使用WindowChrome类。 首先,您在窗口的非客户端部分通过设置自定义属性上公开WindowChrome对象。 然后窗口,用于定义扩展到非工作区应用程序的一部分提供的模板。在公开的属性WindowChrome对象是否ResizeBorderThicknessCaptionHeightCornerRadius,和GlassFrameThickness

ResizeBorderThickness属性指定的用户可以单击并拖动以调整窗口的大小的应用程序窗口外部不可见边框。

CaptionHeight属性指定不可见区域,使系统行为通常与标题栏的窗口的顶部。 这些行为包括: 单击并拖动鼠标来移动窗口,双击以最大化窗口,然后右键单击以显示系统菜单。

大小调整边框和标题区域并没有任何可视元素;它们仅定义输入和启用系统提供的标准窗口行为做出响应的区域。

CornerRadius属性指定窗口的角变圆的量。 此属性没有任何影响,如果对窗口启用玻璃框。

GlassFrameThickness属性指定的窗口周围玻璃框的宽度。 默认情况下,它使用指定的系统值WindowNonClientFrameThickness属性来模拟标准窗口的外观。 当使用玻璃框时,最小化、 最大化,并关闭的标题按钮是可见和交互式的。 应用程序负责显示应用程序图标和标题文本。 可以设置GlassFrameThickness属性以使更宽或窄而不是默认的玻璃框。