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 > |
自定义窗台,同时加上阴影效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | < 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 ; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂