我正在處理應用程序c#WPF。我有我自己的標題欄,我編寫功能密切,最小化和最大化。我正在使用2個屏幕的PC,當我最大化窗口時遇到問題。在主屏幕上,如果我設置了WindowState = WindowState.Maximized
,則隱藏任務欄(來自Windows 7的欄)。我添加了一個函數來根據屏幕設置MaxHeight,但是當我更改MaxHeight時,ActualHeight不會改變。具體來說,當我最大化窗口時,窗口全屏顯示。第二次我最大化時,高度是正確的,任務欄不隱藏。更改Windows.MaxHeight不改變高度
如何在更改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
}
}
更改最大化窗口上的高度屬性不會有任何影響。在最大化窗口之後設置MaxHeight *不會產生任何影響,您必須在*獲得最大化之前執行*。谷歌「wpf避免任務欄重疊在無邊界窗口」,以瞭解如何正確地做到這一點。 –
事實上,我已經在最大化之前移動這段代碼,並且它工作良好。謝謝 ! –