我正在开发一个应用程序c#WPF。我有自己的标题栏,我编码功能关闭,最小化和最大化。我正在使用2个屏幕的PC工作,当我最大化窗口时我遇到了问题。在主屏幕上,如果我设置WindowState = WindowState.Maximized
任务栏(来自Windows 7的栏)被隐藏。我根据屏幕添加了一个设置MaxHeight的功能,但是当我更改MaxHeight时,ActualHeight不会改变。具体来说,当我最大化窗口时,窗口会全屏显示。我第二次最大化,高度正确,任务栏没有隐藏。
更改MaxHeight时,我该怎么做才能刷新高度?
这是我的代码:
protected override void OnStateChanged(EventArgs e)
{
base.OnStateChanged(e);
if (WindowState == WindowState.Maximized)
{
var hwnd = new System.Windows.Interop.WindowInteropHelper(this).EnsureHandle();
var currentMonitor = NativeMethods.MonitorFromWindow(hwnd, NativeMethods.MONITOR_DEFAULTTONEAREST);
var primaryMonitor = NativeMethods.MonitorFromWindow(IntPtr.Zero, NativeMethods.MONITOR_DEFAULTTOPRIMERTY);
var isInPrimary = currentMonitor == primaryMonitor;
if (isInPrimary)
this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
else
this.MaxHeight = Double.PositiveInfinity;
#if DEBUG
var aH = this.ActualHeight;
var h = this.Height;
var mH = this.MaxHeight;
if (aH != h || aH > mH)
{
System.Diagnostics.Debugger.Break();
this.Height = this.MaxHeight;
}
#endif
}
}
答案 0 :(得分:0)
我不是C#的专家,但在Pascal / Delphi中有这个问题。 我必须手动指定表单的大小:
procedure MinMax;
begin
if Form.WindowState=wsNormal then
begin
Form.WindowState:=wsMaximized;
with Screen.WorkAreaRect do
Form.SetBounds(Left, Top, Right - Left, Bottom - Top);
end
else
begin
Form1.WindowState:=wsNormal;
end;
end;
Screen.WorkAreaRect为您提供没有任务栏区域的实际矩形,可以放置在顶部/左侧/底部/右侧。
希望能帮助你。