更改Windows.MaxHeight不会更改高度

时间:2016-08-17 07:45:15

标签: c# wpf screen

我正在开发一个应用程序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
        }
    }

1 个答案:

答案 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为您提供没有任务栏区域的实际矩形,可以放置在顶部/左侧/底部/右侧。

希望能帮助你。