2017-10-16 4 views
0

私は更新フォーム用の新しいプロジェクトを作成し、それにWinFormsを使用しました(私のメインプロジェクトはWPFを使用しています)。WPFウィンドウコンテキストを取得する

MainWindowでいくつかのプロパティを作成しました。そのうちの1つは:

public Form Context 
{ 
    get { return this; } 
} 

これは、MainWindowがWinFormの場合に有効です。しかし、それはWPFウィンドウではありません。 これはエラーのために動作していません。

The type MainWindow can not be converted in System.Windows.Forms.Form 

これを解決する方法はありますか?

私が試みたのは、WindowsFormsHostを使用することでした。だから私は、私のメインウィンドウににWindowsFormsHostを追加します。

<WindowsFormsHost> 
    <wf:Form x:Name="form" /> 
</WindowsFormsHost> 

、次のようにMainWindow.xaml.cs編集:

public Form Context 
{ 
    get { return form; } 
} 

をしかし、私はXamlParseExceptionを得ました。

+1

MainWindowは 'System.Windows.Window'ですが、あなたのプロパティ 'Context'は' System.Windows.Forms.Form'型です。彼らは完全に異なるタイプです、あなたは何をしようとしていますか? – GWigWam

+1

WPFアプリケーションでWindowsフォームコントロールをホストするように思えます。このチュートリアルを試してみてください:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/walkthrough-hosting-a-windows-forms-control-in-wpf-by-using-xaml – mnistic

+0

@mnisticうれしいね。コンテキストに必要なのは何ですか? WalkthoughはMaskedTextBox用です^^ – Luranis

答えて

1

WinFormsとWPFは、どちらもWin32 APIを使用して異なるフレームワークです。この意味では、オブジェクトFormとWindowの間の唯一の共通点は、HWND、つまりウィンドウへのハンドルです。 理論的には、両方のウィンドウが互いのHWNDを知っている場合、メッセージキュー(Send(Post)Message(...))を使用して通信できますが、これはおそらくあなたが探しているものではありません。 ベストプラクティスは、フレームワークの1つに固執するか、フォームをコントロールに変換してWindowsFormsHost内でホストすることです。

+0

フォームをコントロールに変換することはどういう意味ですか?私はどのように私のフォームにウィンドウ(これ)を与えることができますか?私のMainWindowがWinFormの場合、 'get {return this; } '大丈夫だろう。しかし、それはWPFのウィンドウで、私は同じ(これ)が必要です。あなたが見ることができるように私は私の質問を編集しました。 – Luranis

+0

WPFでは、WindowクラスにはContentというプロパティがあります。 XAMLでは、 ...タグ内のコンテンツを定義します。たとえば、ウィンドウのコンテンツを含むUserControlを作成することによって、WPFウィンドウをコントロールに変換できます。私は自分の練習でWinFormsを使用していませんが、同じことをすることができるはずです。 WinFomsのUserControlには何がありますか?フレーム? – shadow32

+0

WinFormsにフレームがありません。フレームのアナログはパネルです。それが事です。 WPFからWinFormにContentプロパティを返す必要があります。 – Luranis