WPF中自定义标题栏时窗体最大化处理之WindowChrome
2021-07-01 22:04
标签:bar ane dock 颜色 影响 false bind 研究 直接 注意: 注意:控件模板中的定义: 存在的问题: 最大化边框问题 —— 会有部分溢出。 根据观察,这个溢出宽度应该是 不管使用哪种方法,最大化时,系统的标题栏高度都发生了变化,故,需要重新设置模板中定义的标题栏高度。 至此,都是系统标题栏和我们自定义内容组合使用,但这样总有些边边角角要修正,下面就完全自定义标题栏 如果不设置 关联了解: 点击查看完整源代码 解:奇葩史 落后要挨打,个人以前一直局限于老旧方式实现窗体处理,没有跟进WPF技术改进,在此,非常感谢@vbfool的提醒。【之前说周末搞出来,自己这几周浪了,没研究。今天趁着别人双11买买买,咱就撸撸代码】 WPF中自定义标题栏时窗体最大化处理之WindowChrome 标签:bar ane dock 颜色 影响 false bind 研究 直接 原文地址:https://www.cnblogs.com/huaxia283611/p/wpf-maximize-windowchrome.html
.NET Framework 4.5
之后才集成发布的。见:WindowChrome Class
.NET Framework 4.0
中使用WindowChrome,需要安装Ribbon来支持WindowChrome
SystemParameters2
,这个应该是Ribbon里的东西,4.5
想用可以安装Xceed.Wpf.AvalonDock
库,这里面有现成的Microsoft.Windows.Shell.SystemParameters2
实现——当然,自己不怕麻烦,可以自己实现来获取要用的系统变量。(一般用不着,4.5
中SystemParameters
添加了许多系统变量的实现)实现步骤
第一步:基本实现【保留系统基础操作按钮】
8
,此值的来源:(SystemParameters.MaximizedPrimaryScreenWidth - SystemParameters.WorkArea.Width)/2
,高度也可以这样计算。第二步:优化边界处理
第三步:完全自定义标题栏【即,不使用系统的操作按钮】
GlassFrameThickness
设置为0
WindowChrome.IsHitTestVisibleInChrome="True"
WindowChrome.IsHitTestVisibleInChrome
,则由于我们之前设置CaptionHeight
,则这个区域内,按钮将失效。
但是,也不能将整个标题栏布局设置这个属性,那样会完全覆盖系统标题栏的操作,如拖动效果,即CaptionHeight
设置的那个区域。
//标题栏按钮功能实现
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.btn_Min.Click += Btn_Min_Click;
this.btn_Max.Click += Btn_Max_Click;
this.btn_Close.Click += Btn_Close_Click;
}
private void Btn_Close_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void Btn_Max_Click(object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Maximized == this.WindowState ? WindowState.Normal : WindowState.Maximized;
}
private void Btn_Min_Click(object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Minimized;
}
}
如果你平时也使用Visual Studio Code【VSCode】,文中的第一步和第三步,在vscode的设置中有对应效果:
相关下载
文章标题:WPF中自定义标题栏时窗体最大化处理之WindowChrome
文章链接:http://soscw.com/essay/100496.html