WPF常用控件-Window

常用属性

这里重点记录一些关键且容易忘记的属性,那些很常用的如Title啥的就不在这里一一说明了。

任务栏按钮

ShowInTaskbar:是否在任务栏中显示应用按钮,默认为True

层级

Topmost:应用是否始终在所有应用的最上层,默认为False

图标

Icon:设置应用窗体左上角的图标。

事件函数

Loaded:指定窗体加载函数,例如Loaded="Window_Loaded"

Closing:指定窗体的关闭事件处理函数。

MouseDoubleClick:指定窗体的双击事件处理函数。

WindowChrome

在WPF中,如果希望设置窗体无边框,是可以通过设置窗体WindowsWindowStyle="None"来实现的。但是通过这种方式设置的无边框窗口,缺少了边框阴影、边框拉伸、边框移动、双击放大/缩小等一系列的功能。对于此WPF提供了更加简便的方式,即WindowChrome

csharp 复制代码
<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:指定窗口顶部的标题区域的高度。

csharp 复制代码
<WindowChrome.WindowChrome>
    <WindowChrome CaptionHeight="50"/>
</WindowChrome.WindowChrome>

取消默认按钮

使用WindowChrome之后,虽然看不见,但是那几个默认的按钮还是存在的,如果鼠标点击对应的位置,就会触发相应的功能。如果要屏蔽这三个默认按钮,可以使用以下属性。

UseAeroCaptionButtons:是否启用标题按钮的命中测试,也就是点击对应位置是否触发这三个标题按钮,默认为True,设为False即可屏蔽。

csharp 复制代码
<WindowChrome.WindowChrome>
    <WindowChrome UseAeroCaptionButtons="False"/>
</WindowChrome.WindowChrome>

玻璃边框宽度

GlassFrameThickness:设置窗体玻璃边框的宽度,官方文档中有说,如果指定 GlassFrameThickness 值为 -1,那么可以做到整个窗口都遮挡,所以一般设置为1就可以了。如果要禁用这个效果,则设置为0即可。

缩放区域宽度

如果没有禁用窗口的缩放,在希望改变缩放触发区域宽度时,可以通过ResizeBorderThickness属性进行修改。

xml 复制代码
<WindowChrome.WindowChrome>
    <WindowChrome ResizeBorderThickness="10"/>
</WindowChrome.WindowChrome>

标题栏遮挡子控件的处理

当窗体内的子控件出与窗体标题区域重叠时,默认会被标题区域遮挡,如果希望优先使用子控件,可以在子控件中使用以下属性。

WindowChrome.IsHitTestVisibleInChrome:附加属性,是否优先点击窗体中的可见区域,默认为false

csharp 复制代码
<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>

WindowStyle方式

属性设置

csharp 复制代码
<Window ......
        WindowStyle="None"
        Background="Transparent"
        AllowsTransparency="True"
				......
>
		......
</Window>

窗体拖动

有些情况下只能通过WindowStyle的方式来设置窗体的无边框样式(例如异样窗口下无法使用WindowChrome),此时如果要实现窗体的拖动,就需要在对应的区域内设置

csharp 复制代码
<Grid>
	  <Label Background="Yellow" Height="20" VerticalAlignment="Top" MouseDown="Label_MouseDown"/>
</Grid>
csharp 复制代码
private void Label_MouseDown(object sender, MouseButtonEventArgs e)
{
    DragMove();//吓尿了,比winform简单很多
}

无边框遮挡任务栏解决方案

在使用WindowStyle="None"的方式设计无边框窗体时,将窗体最大化会遮挡屏幕下方的任务栏。针对这个问题有一个较好的解决方案是在窗体加载时设置窗体的最大宽度和高度。

csharp 复制代码
public MainWindow()
{
    InitializeComponent();
		MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
		MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
}
相关推荐
FuckPatience2 天前
WPF 具有跨线程功能的UI元素
wpf
诗仙&李白2 天前
HEFrame.WpfUI :一个现代化的 开源 WPF UI库
ui·开源·wpf
He BianGu2 天前
【笔记】在WPF中Binding里的详细功能介绍
笔记·wpf
He BianGu3 天前
【笔记】在WPF中 BulletDecorator 的功能、使用方式并对比 HeaderedContentControl 与常见 Panel 布局的区别
笔记·wpf
123梦野3 天前
WPF——效果和可视化对象
wpf
He BianGu3 天前
【笔记】在WPF中Decorator是什么以及何时优先考虑 Decorator 派生类
笔记·wpf
时光追逐者4 天前
一款专门为 WPF 打造的开源 Office 风格用户界面控件库
ui·开源·c#·.net·wpf
He BianGu4 天前
【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能
笔记·wpf
Rotion_深5 天前
C# WPF使用线程池运行Action方法
c#·wpf·线程池
攻城狮CSU5 天前
WPF 深入系列.2.布局系统.尺寸属性
wpf