12

2 つのモニターと、WPF ウィンドウを起動する WinForm アプリがあります。WinFormがオンになっている画面を取得し、同じ画面にWPFウィンドウを表示したい。これどうやってするの?

4

4 に答える 4

14

WPF には便利な System.Windows.Forms が含まれていません。Screenクラスですが、そのプロパティを使用して、WinForms アプリケーションでタスクを実行できます。

これは、WinForms ウィンドウを意味し、_wpfWindowは、以下の例の WPF ウィンドウを参照する定義済み変数であると仮定します (これは、Button.Click ハンドラーのように、WPF ウィンドウを開くために設定したコード ハンドラーにあります)。

Screen screen = Screen.FromControl(this);
_wpfWindow.StartupLocation = System.Windows.WindowStartupLocation.Manual;
_wpfWindow.Top = screen.Bounds.Top;
_wpfWindow.Left = screen.Bounds.Left;
_wpfWindow.Show();

上記のコードは、WinForms ウィンドウを含む画面の左上隅にある WPF ウィンドウをインスタンス化します。画面の中央などの別の場所に配置したり、WinForms ウィンドウの右下に「カスケード」スタイルで配置したい場合は、数学をお任せします。

画面の中央にある WPF ウィンドウを取得する別の方法は、単に使用することです

_wpfWIndow.StartupLocation = System.Windows.WindowStartupLocation.CenterScreen

ただし、これはマウスの位置を使用して WPF ウィンドウを表示する画面を決定するため、それほど柔軟ではありません (また、ユーザーがマウスをすばやく動かした場合、マウスは WinForms アプリとは異なる画面上にある可能性があります。デフォルトのボタンなどを使用します)。

編集:これは、InterOp を使用して WPF ウィンドウを非 WPF ウィンドウの中央に配置することに関するSDK ドキュメントへのリンクです。基本的に、数学を理解するという点で説明したことを行いますが、ウィンドウの HWND を使用して WPF ウィンドウの「所有者」プロパティを正しく設定できます。

于 2009-02-04T18:38:35.470 に答える
6

これが最も簡単な方法です (WindowStartupLocation.CenterOwner を使用します)。

MyDialogWindow dialogWindow = new MyDialogWindow();
dialogWindow.Owner = this;
dialogWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;

dialogWindow.ShowDialog();

相互運用やウィンドウ座標の設定は必要ありません:)

于 2009-03-25T01:13:44.877 に答える
3

それを行う別の方法は次のとおりです。

WindowInteropHelper helper = new WindowInteropHelper(this);

this.StartupLocation = System.Windows.WindowStartupLocation.Manual;
this.Left = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Left;
this.Top = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Top;

これ=あなたのWPFウィンドウ...

于 2012-08-29T03:46:48.447 に答える
1

System.Windows.Forms.Screen [1] を使用し、FromControl メソッドを使用してフォームの画面情報を取得できるはずです。これを使用して、位置を特定しようとしている画面に基づいて WPF ウィンドウ (上、左) を配置できます。

[1] WinForms dll をロードしない場合は、win32 MonitorFromRect などを使用することもできます。ただし、既に winforms API を取得しているため、メモリ/パフォーマンス ヒットを支払う必要はありません。

于 2009-02-04T18:50:08.037 に答える