独自のウィンドウを作成するために、最近ボーダレスに変更したブラウザ外の 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:
ウィンドウの境界線を元に戻し、カスタムの境界線も残したところ、問題なく動作しました。コントロールに境界線がない場合に問題が発生するようです。