这里重点记录一些关键且容易忘记的属性,那些很常用的如Title啥的就不在这里一一说明了。
任务栏按钮
ShowInTaskbar
:是否在任务栏中显示应用按钮,默认为True
。
层级
Topmost
:应用是否始终在所有应用的最上层,默认为False
。
图标
Icon
:设置应用窗体左上角的图标。
事件函数
Loaded
:指定窗体加载函数,例如Loaded="Window_Loaded"
。
Closing
:指定窗体的关闭事件处理函数。
MouseDoubleClick
:指定窗体的双击事件处理函数。
在WPF中,如果希望设置窗体无边框,是可以通过设置窗体Windows
的WindowStyle="None"
来实现的。但是通过这种方式设置的无边框窗口,缺少了边框阴影、边框拉伸、边框移动、双击放大/缩小等一系列的功能。对于此WPF提供了更加简便的方式,即WindowChrome
。
<Window x:Class="WPFStudy.MainWindow"
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"
mc:Ignorable="d"
xmlns:local="clr-namespace:WPFStudy"
Title="MainWindow"
Height="450"
Width="800">
<WindowChrome.WindowChrome>
<WindowChrome/>
</WindowChrome.WindowChrome>
<Grid>
</Grid>
</Window>
CaptionHeight
:指定窗口顶部的标题区域的高度。
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="50"/>
</WindowChrome.WindowChrome>
取消默认按钮
使用WindowChrome
之后,虽然看不见,但是那几个默认的按钮还是存在的,如果鼠标点击对应的位置,就会触发相应的功能。如果要屏蔽这三个默认按钮,可以使用以下属性。
UseAeroCaptionButtons
:是否启用标题按钮的命中测试,也就是点击对应位置是否触发这三个标题按钮,默认为True
,设为False
即可屏蔽。
<WindowChrome.WindowChrome>
<WindowChrome UseAeroCaptionButtons="False"/>
</WindowChrome.WindowChrome>
玻璃边框宽度
GlassFrameThickness
:设置窗体玻璃边框的宽度,官方文档中有说,如果指定 GlassFrameThickness
值为 -1,那么可以做到整个窗口都遮挡,所以一般设置为1就可以了。如果要禁用这个效果,则设置为0即可。
缩放区域宽度
如果没有禁用窗口的缩放,在希望改变缩放触发区域宽度时,可以通过ResizeBorderThickness
属性进行修改。
<WindowChrome.WindowChrome>
<WindowChrome ResizeBorderThickness="10"/>
WindowChrome.WindowChrome>
标题栏遮挡子控件的处理
当窗体内的子控件出与窗体标题区域重叠时,默认会被标题区域遮挡,如果希望优先使用子控件,可以在子控件中使用以下属性。
WindowChrome.IsHitTestVisibleInChrome
:附加属性,是否优先点击窗体中的可见区域,默认为false
。
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="50" UseAeroCaptionButtons="False"/>
</WindowChrome.WindowChrome>
<Grid>
<Button WindowChrome.IsHitTestVisibleInChrome="True" Width="50" Height="50" Content="button" HorizontalAlignment="Right" VerticalAlignment="Top" />
</Grid>
属性设置
<Window ......
WindowStyle="None"
Background="Transparent"
AllowsTransparency="True"
......
>
......
</Window>
窗体拖动
有些情况下只能通过WindowStyle
的方式来设置窗体的无边框样式(例如异样窗口下无法使用WindowChrome
),此时如果要实现窗体的拖动,就需要在对应的区域内设置
<Grid>
<Label Background="Yellow" Height="20" VerticalAlignment="Top" MouseDown="Label_MouseDown"/>
</Grid>
private void Label_MouseDown(object sender, MouseButtonEventArgs e)
{
DragMove();//吓尿了,比winform简单很多
}
无边框遮挡任务栏解决方案
在使用WindowStyle="None"
的方式设计无边框窗体时,将窗体最大化会遮挡屏幕下方的任务栏。针对这个问题有一个较好的解决方案是在窗体加载时设置窗体的最大宽度和高度。
public MainWindow()
{
InitializeComponent();
MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
}