2017-12-06 28 views
0

私のアプリケーションでは、WindowsFormsHostで自分のコントロール(WF)を追加し、このホストをWindow(WPF)に追加します。WindowsFormsHostの親コントロールを取得するには?

WindowsFormsHost host = new WindowsFormsHost(); 
host.Child = grid; //this is instance of WF control 
testwindow.testSurface.Children.Add(host); // add in Window(WPF) 

問合せ: 今私はtestWindowの画像をキャプチャする(WFプロジェクトではないWPFで)「グリッド」から「testWindow」のハンドル値を取得する必要があります。

"grid.Parent as WinFormsAdapter"を試しましたが、内部クラスです。私は以下の記事を見つけましたが、WPFプロジェクトですべての記事を表示しています。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/469f21db-c9cb-4e9c-a29a-b90722032cd1/how-to-find-the-winform-controls-parent-windowsformshost?forum=wpf

誰もがこれを達成するためにどのように私を提案してください?

おかげで、

答えて

1

がこのgridからWindowsFormsHostを取得してください。一度それがあれば、WindowsFormsHostの親を得るためにあなたの方法を試してみることができます。

Control parent = grid.Parent; 
Reflection.Assembly adapterAssembly = GetType(WindowsFormsHost).Assembly; 
Type adapterType = adapterAssembly.GetType("System.Windows.Forms.Integration.WinFormsAdapter"); 
object adapterParent = adapterType.InvokeMember("_host", BindingFlags.NonPublic |BindingFlags.GetField | BindingFlags.Instance, null, adapter, new object[] {}); 
WindowsFormsHost winHost = adapterParent as WindowsFormsHost; 

上記のコードはテストされていませんが、最終目標に向けて手助けしてくれれば幸いです。

+0

ありがとうございました。今、私はWindowsFormsHostの親を取得できます。 Handle(IntPtr)の値が "0"として返されるため、イメージを取得できません。 制御アダプタ= DataGrid.Parent; アセンブリasm = typeof(WindowsFormsHost)。アセンブリ; タイプtype = asm.GetType( "System.Windows.Forms.Integration.WinFormsAdapter"); オブジェクトparent = type.InvokeMember( "_host"、BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance、null、adapter、new Object [] {}); WindowsFormsHostホスト= WindowsFormsHostとしての親; ウィンドウtw =(ウィンドウ)host.Parent; IntPtr twHandle = WindowInteropHelper(tw).Handle; – Prithiv

+0

私のコードに間違いはありますか? – Prithiv

+0

私はこのコードを試してみましたが、これは正常に動作しています var windows = System.Windows.Application.Current.Windows; IntPtr twHandle = new System.Windows.Interop.WindowInteropHelper(windows [2])。ハンドル。 – Prithiv

関連する問題