Silverlight WindowState.Maximized奇怪的行为

时间:2014-07-17 20:44:01

标签: c# silverlight maximize-window

我有一个浏览器Silverlight应用程序,我最近改为无边框,以便创建我自己的窗口。我有一个恢复/最大化按钮,但它导致一些奇怪的行为。应用程序启动并自动最大化。我可以在主显示器上恢复并最大化,没有任何问题。如果我恢复,移动到另一个监视器,然后最大化,它只是消失。它似乎最大化了屏幕或其他东西。我只是使用下面的代码切换WindowState。有什么想法吗?

App.Current.MainWindow.WindowState = WindowState.Normal;
App.Current.MainWindow.WindowState = WindowState.Maximized;

编辑:
我发现了一些关于它做什么的更多信息。看起来它出于某种原因将窗口放在了一边。

以下是我手动将其移动到左侧监视器上最大化时的坐标。

Left: -1920, Top: 0, Height: 1040, Width: 1920

如果我移动并点击最大值,则将其置于这些坐标

Left: -5760, Top: 0, Height: 1040, Width: 1920

不确定它是什么。我想我可以使用pInvoke获取每个显示器的分辨率并自己进行定位,但似乎我应该这样做。

编辑2:
我尝试使用pInvoke来最大化窗口,它也做同样的事情。

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpCaption);

public static IntPtr FindHwnd(Window window)
{
    var oldTitle = window.Title;
    var id = oldTitle + "(" + Guid.NewGuid().ToString() + ")";
    window.Title = id;
    var hwnd = FindWindowByCaption(IntPtr.Zero, id);
    window.Title = oldTitle;
    return hwnd;
}

ShowWindow(FindHwnd(Application.Current.MainWindow), SW_SHOWMAXIMIZED);

编辑3:
我把窗口边框放回去,也离开了我的自定义边框,然后工作正常。看起来当控件没有边框时会导致问题。

0 个答案:

没有答案