WPF WindowChrome 自定义窗体
一、标准Window

窗口由两部分构成:工作区,非工作区,图中出工作区之外都是非工作区。
二、WindowChrome的基本概念

WindowChrome的作用:将客户区域扩展至整个窗体(遮住了非客户区),同时提供部分标准窗体的功能。
若要自定义窗口,同时保留其标准功能,可以使用WindowChrome类。 WindowChrome类允许您控制的客户端和应用程序窗口的非工作区之间的边界。
<WindowChrome.WindowChrome>
<WindowChrome />
</WindowChrome.WindowChrome>
运行效果如图:

UseAeroCaptionButtons:表示标题栏上的那三个默认按钮是否可以命中,因为我们想要自己管理这三个按钮的样式、显示或隐藏,所以设置为False
GlassFrameThickness:用于控制边框
ResizeBorderThickness:用户可以单击并拖动以调整窗口大小的区域的宽度。
CaptionHeight:指定WindowChrome的标题栏高度,允许窗体被鼠标拖动
CornerRadius:则将窗体变成了圆角
IsHitTestVisibleInChrome:穿过CaptionHeight,允许响应控件事件
示例一:

XAML代码:
<WindowChrome.WindowChrome>
<WindowChrome CornerRadius="0"
CaptionHeight="0"
GlassFrameThickness="1"
UseAeroCaptionButtons="False"
NonClientFrameEdges="None" />
</WindowChrome.WindowChrome>
<Grid>
<Border Height="30" Background="Red" VerticalAlignment="Top"></Border>
</Grid>
自定义窗台,同时加上阴影效果:
<Style TargetType="Window" x:Key="WindowStyle">
<!--无边框-->
<Setter Property="ResizeMode" Value="NoResize"></Setter>
<!--无默认样式-->
<Setter Property="WindowStyle" Value="None"></Setter>
<!--自定义窗体-->
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome GlassFrameThickness="-1" CaptionHeight="30" CornerRadius="0"/>
<!--CaptionHeight:标题栏高度,允许窗体被鼠标拖动-->
<!--CornerRadius:窗体边框圆角-->
<!--GlassFrameThickness:窗体边框大小-->
</Setter.Value>
</Setter>
<!--阴影效果-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Border BorderThickness="10" CornerRadius="10">
<Border.Effect>
<DropShadowEffect ShadowDepth="0" BlurRadius="10" Color="#AAAAAA"/>
</Border.Effect>
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

参考:
WindowChrome自定义Window Style:https://www.cnblogs.com/dino623/p/custom_window_style_using_WindowChrome.html
使用WindowChrome自定义Window Style:https://www.cnblogs.com/dino623/p/CustomWindowStyle.html
WPF中自定义标题栏时窗体最大化处理之WindowChrome:https://www.cnblogs.com/huaxia283611/p/wpf-maximize-windowchrome.html
WPF 窗口大小自适应:https://blog.csdn.net/weixin_34268843/article/details/89581243
WPF 设置属性使窗口不可改变大小:https://blog.csdn.net/qq_39704682/article/details/95475855
WindowChrome的功能详解:https://www.cnblogs.com/cdaniu/p/16875714.html
WPF的MainWindow设置背景透明仍然显示黑色Black问题
<Window ...
AllowsTransparency="True"
Foreground="{x:Null}"
Background="{x:Null}"
FocusVisualStyle="{x:Null}">
注意要设置AllowsTransparency=true,允许透明色,否则就是黑色
window 拖动
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
if (e.ButtonState == MouseButtonState.Pressed)
DragMove();
}
窗口失去焦点
protected override void OnDeactivated(EventArgs e)
{
base.OnDeactivated(e);
this.Close();
}
设置窗口内容自适应
<Window SizeToContent="WidthAndHeight"
判断项目中的某个窗体是否已经打开或者已经存在
foreach (Window item in Application.Current.Windows)
{
if (item is window1) return;
}

浙公网安备 33010602011771号