2016-08-17 37 views
0

我正在處理應用程序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 
     } 
    } 
+1

更改最大化窗口上的高度屬性不會有任何影響。在最大化窗口之後設置MaxHeight *不會產生任何影響,您必須在*獲得最大化之前執行*。谷歌「wpf避免任務欄重疊在無邊界窗口」,以瞭解如何正確地做到這一點。 –

+0

事實上,我已經在最大化之前移動這段代碼,並且它工作良好。謝謝 ! –

回答

0

I'm在C#中沒有專家,但在帕斯卡爾/德爾福有這個問題。 我不得不手動指定表單的尺寸,像這樣:

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給你沒有任務欄區域中的實際矩形,其可以被置於頂部/左/底/右。

希望可以幫到你。

+0

我嘗試過這樣的事情,但是當我使用OnStateChanged方法時,不考慮新值。 –

+0

此線程已經回答了此問題: http://stackoverflow.com/a/6415176/5471509 – BionicWave

+0

此線程適用於Windows窗體,Screen.PrimaryScreen.WorkingArea不存在於WPF中 –