我有一个浏览器外的 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:
我把窗口边框放回去,也留下了我的自定义边框,然后它工作正常。似乎当控件没有边框时会导致问题。