2009-06-16 19 views
0

WPFで新しいビットを設計する既存のWinFormsアプリケーションがあります。物事は合理的にうまくいっており、私は最初にダイアログが必要になりました。WPF相互運用機能とダイアログ

私はWPFでダイアログを行いたいと思います。実際のコンテンツに対してUserControlを実行し、そのコンテンツをWinFormsフォームでElementHostでホストする必要があるように見えます(UserControlにはShowDialog()メソッドがないため)。

これが私の質問です。それはどのように機能するのですか?私が言うことができるベスト、WPFのUserControlはDialogResultプロパティを持っていない(それはShowDialog()メソッドを持たないことを考えると意味がある) - WPFウィンドウコントロールが必要なように見える - この場合、私はそれを使うことができると思います。

基本的な流れとここでの設定の苦闘。誰かが光を照らすことができますか?

これも可能ですか?

答えて

2

WinFormsアプリケーションからWPFウィンドウを開くことができます。

ウィンドウを作成してShowDialog()を呼び出してください。 CLRはWPFフレームワークを読み込み、ウィンドウを開きます。

+0

ただし、新しいWPFウィンドウを作成するには別のプロジェクトが必要ですが、そのオプションはデフォルトのVS WinFormsプロジェクトテンプレートには表示されないように見えます。しかし、いったんそれをやったら、うまくいきます。 WPFウィンドウのShowDialog()メソッドは、これまで使ってきたより細かいDialogResultの代わりに?boolを返します(当然意味があります - そのクラスについては何も知らないので) 。ありがとう、キャメロン。 –

0

ほとんどの場合、WinFormsアプリケーションのようにが動作するようにするには、あなたが説明したアプローチがうまくいきます。私の相互運用のケースではほとんど同じことがあります。

WPFはMessageBoxをサポートしています(WinFormsとは少し異なりますが)、WPF Windowsを使用して何かを配置することもできます(DialogResultに似たものを追加することで拡張できます)。ただし、提供されるWPFコントロールは、ダイアログ、特にモーダルなものを最小限に抑えるために、UXのやり取りを変更しようとしていることを示唆しています。しかし、私は、WPFコンテンツをホストし、あなたがそうあなた自身のDialogResultのような列挙を包む、宣言「を使用して」好きなよう清潔に応じて、/ wを扱うための特別のWinFormsフォーム/ ElementHostサブクラスを作成し、あなたの人生を容易にするため

WPFコードビハインドをもっと煩雑にするSystem.Windows.Forms名前空間を含める必要はありません。

+0

しかし、私が記述したアプローチには大きな欠けている部分があります.DialogResultです。それはどこから来たのですか?私は何とかWPFウィンドウコントロールを使用できますか?もしそうなら、どうですか? –

+0

DialogResultは簡単な列挙型です。似たような列挙型(またはSystem.Windows.MessageBoxResultを再利用する)とサブクラスWindowを作成するのは難しくありません。しかし、あなたのアプリケーションのコアはWinFormsなので、私はWPFコンテンツをラップするために使用できる組み込みのElementHostで作成された特定のForm派生クラスを持つことに固執します。 – micahtan