WPF无边框窗口仅最大化为主屏幕大小

时间:2013-10-22 11:35:36

标签: c# .net wpf .net-4.0 windows-7-x64

我遇到了多监视器系统的问题,并最大化了我的无边界WPF C#.NET 4.0窗口。一台显示器为1680x1050(主要),第二台为1920x1080(二级)。当我在主屏幕上最大化我的窗口时 - 没有问题,即使我切换那两个的顺序。但每次我试图在二级屏幕上最大化它时,它被切断到主显示器的大小。我看到窗口大小是合适的,但这不起作用。

获取监视器的大小:

    private System.Windows.Forms.Screen GetCurrentScreen()
    {
        System.Drawing.Point centerPoint = new System.Drawing.Point((int)(Left + Width / 2), (int)(Top + Height / 2));
        foreach (System.Windows.Forms.Screen s in System.Windows.Forms.Screen.AllScreens)
        {
            if (s.Bounds.Contains(centerPoint)) 
            {
                return s;
            }
        }
        return null;
    }

最大化:

    private void Maximize
    {
        if (this.WindowState == WindowState.Normal)
        {
            var scr = GetCurrentScreen();

            //this.MaxHeight = scr.WorkingArea.Height;
            //this.MaxWidth = scr.WorkingArea.Width;

            if (scr != null)
            {
                if (scr.Primary)
                {
                    this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
                    this.MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
                }
                else
                {
                    this.MaxHeight = double.PositiveInfinity; //even ridiculous values don't work
                    this.MaxWidth = double.PositiveInfinity;
                    this.Height = scr.WorkingArea.Height; // correct values of 2nd screen
                    this.Width = scr.WorkingArea.Width;
                }
            }
            else
            {
                this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
                this.MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
            }

            this.WindowState = WindowState.Maximized;
    }

我得到的是: http://imgur.com/ZYzVV9Q,yf7lSfY#1

我想要的: http://imgur.com/ZYzVV9Q,yf7lSfY#0

由于

3 个答案:

答案 0 :(得分:2)

上次我必须在辅助屏幕上最大化窗口时,这对我有用:

Screen sTwo = Screen.AllScreens[1];
this.Top = sTwo.Bounds.Top;
this.Left = sTwo.Bounds.Left;
this.Width = sTwo.Bounds.Width;
this.Height = sTwo.Bounds.Height;

确保添加参考

using System.Windows.Forms; 

并设置

AllowsTransparency="True"
你的* .xaml

中的

答案 1 :(得分:1)

您的某些代码可能导致此问题,因为我无法在我的两个屏幕上复制它们......它们的大小相同,但如果我将分辨率更改为一个,则应用程序仍能正确地最大化。如果您启动一个新的WPF应用程序,只需添加

WindowState = "Maximized" 

到Window声明,你还有同样的问题吗?

答案 2 :(得分:0)

尝试覆盖或更正ArrangeOverride方法:

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.arrangeoverride.aspx

  

在派生类中重写时,定位子元素和   确定FrameworkElement派生类的大小

症状很相似。