1 启用WindowChrome

添加如下代码(第9行、10行):

  1. <Window x:Class="Test.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:Test"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="450" Width="800">
  9. <WindowChrome.WindowChrome>
  10. </WindowChrome.WindowChrome>
  11. <Grid/>
  12. </Window>

启用WindowChrome后,窗口会变为无边框的窗口。此时窗口的尺寸与设计器中设定的尺寸一致。
**

2 WindowChrome参数

参数填写语法:

  1. <WindowChrome.WindowChrome>
  2. <WindowChrome
  3. CaptionHeight="20"
  4. GlassFrameThickness="20"
  5. NonClientFrameEdges="Top"
  6. ResizeBorderThickness="20"
  7. UseAeroCaptionButtons="False"/>
  8. </WindowChrome.WindowChrome>

2.1 CaptionHeight

官方文档:

Double类型。标题栏区域(不可见)的高度,从顶部边缘向下计算。

2.2 GlassFrameThickness

官方文档:

Thickness类型。四周边框的尺寸,从窗口边缘向内部计算。
有着多个使用方式:

  1. GlassFrameThickness="-1" <!--边框铺满窗口-->
  2. GlassFrameThickness="10" <!--四周尺寸均为同一值-->
  3. GlassFrameThickness="10,20,30,40" <!--依照左上右下的顺序设定边框尺寸-->

2.3 NonClientFrameEdges

官方文档:

NonClientFrameEdges类型。
暂不清楚具体效果,看起来像是当设置成某个位置时,该位置的边框尺寸将和系统设置的一致。

2.4 ResizeBorderThickness

官方文档:

Thickness类型。窗口四周可以调整窗口尺寸大小的区域(不可见),从窗口边缘向内部计算。
设置该尺寸会影响标题栏区域的位置,调整的边框在标题栏上方。
设置为0时则不可以通过拖拽的方式调整窗口大小。

2.5 UseAeroCaptionButtons

官方文档:

Boolean类型。用于决定边框上的最小化、最大化、还原、关闭按钮是否可以被点击。

3 向标题栏内添加控件

官方文档:

在CaptionHeight区域内的控件,无法被鼠标点击到。这是因为标题栏区域是在最顶层的,因此会挡住这些控件。
如果想要添加一些可以自己用的控件,需要给组件单独添加一个Attribute(第二行):

  1. <Button Content="TestButton" Width="100" Height="100" HorizontalAlignment="Center" VerticalAlignment="Top"
  2. WindowChrome.IsHitTestVisibleInChrome="True"/>

此时,鼠标就可以点击到放置在标题栏区域内的控件了。

4 WindowChrome的效果分析