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