似たような問題に関して多くの質問がありましたが、私の質問にはまだ答えが見つからないほど明確なものは見つかりませんでした。MainWindowと同じモニタでウィンドウを開く
ユーザは私のプログラムのMainWindowを移動することができます。もしあれば、別のモニタに移動することができます。 MainWindowに何かを追加するためにクリックすると、フォームを記入できるように新しいウィンドウが作成されます。
問題は、この新しいウィンドウが、MainWindowが現在位置している画面から開始するのではなく、OSのプライマリ画面から起動することです。
私はこの質問を見ました。 How to make a dialog(view) open up on the same monitor as the main windowを参照して、このケースでMainWindowのオーナーを設定したことを確認しました。だから私はWindow_Loaded方法新しいウィンドウに
Owner = Application.Current.MainWindow;
を追加しました。これはMainWindowと同じ画面にWindowをロードしますが、クラッシュすると、エラーが発生します。Cannot set Owner property after Dialog is shown.
当然、新しいウィンドウが表示される前にOwnerプロパティの設定を移動します。
contractAddwindow.Owner = Application.Current.MainWindow; contractAddwindow.ShowDialog();
しかしこれは、プライマリ画面上contractAddWindow
開始、前と同じ問題があります。
私の質問は、メインウィンドウの代わりにMainWindowと同じモニタに新しいウィンドウを読み込ませるにはどうすればいいですか?
SetWindowScreen(this, GetWindowScreen(App.Current.MainWindow));