在使用wpf时全屏 Maximized 会遮盖任务栏,此文章以个人理解实现全屏不占据任务栏。
一、前端.xaml代码(注:代码使用了MaterialDesignInXAML;没使用 去掉style即可)
<Button
x:Name="btnMin"
Content="—"
Style="{StaticResource MaterialDesignFlatMidBgButton}" />
<Button
x:Name="btnMax"
Content="?"
Style="{StaticResource MaterialDesignFlatMidBgButton}" />
前端Window内 加上WindowState="Normal" WindowStyle="None"
二、后端.cs
1、此方法放在初始化内
btnMin.Click += (s, e) => { this.WindowState = WindowState.Minimized; };
btnMax.Click += (s, e) =>
{
if (strWState == "HMax")
{
ChangeWindowState("HMax");
}
else if (strWState == "Normal")
{
ChangeWindowState("Normal");
}
};
2、自定义方法,rcnormal用来记录strWState == "Normal"时窗体的位置与大小
//Normal-普通、Max-最大化*全屏、HMax最大化*全屏(不包括任务栏)
private string strWState = "Normal";
Rect nowState;//保存下当前位置与大小
public void ChangeWindowState(string WinState)
{
switch(WinState)
{
case "HMax": {
this.Left = nowState.Left;
this.Top = nowState.Top;
this.Width = nowState.Width;
this.Height = nowState.Height;
strWState = "Normal";
} break;
case "Normal": {
nowState = new Rect(this.Left, this.Top, this.Width, this.Height);
this.Left = 0;//设置位置
this.Top = 0;
Rect rc = SystemParameters.WorkArea;//获取工作区大小
this.Width = rc.Width;
this.Height = rc.Height;
strWState = "HMax";
} break;
default:break;
}
}
三、拖动至顶端--全屏
//xaml 在Window内添加
SizeChanged="Window_SizeChanged"
//在.cs内添加
//防止 窗口拖动到顶端鼠标出界的话窗口将会最大化*全屏,改为 最大化*全屏(不包括任务栏)
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.ActualHeight > SystemParameters.WorkArea.Height || this.ActualWidth > SystemParameters.WorkArea.Width)
{
this.WindowState = System.Windows.WindowState.Normal;
ChangeWindowState("Normal");
}
}