我有一种情况需要找到托管WPF控件的父窗口或WinForm。无论情况如何,我都需要得到父窗口或WinForm的句柄。
问题是当使用ElementHost在WinForm中托管WPF控件时。如何从WPF控件中找到托管WinForm的句柄。
答案 0 :(得分:3)
刚想通了!
var presentationSource = (HwndSource)PresentationSource.FromVisual(child);
var parentHandle = presentationSource.Handle;
答案 1 :(得分:1)
[DllImport("user32.dll")]
public static extern int GetParent(int hwnd);
public int GetParentWindowHandle(Visual child)
{
HwndSource presentationSource = (HwndSource)PresentationSource.FromVisual(child);
int parentHandle = presentationSource.Handle.ToInt32();
int handle = parentHandle;
while (parentHandle != 0)
{
handle = parentHandle;
parentHandle = ApplicationHelperInterop.GetParent(parentHandle);
}
return handle;
}
然后,您可以遍历System.Windows.Forms.Application.OpenForms
集合以查找与上面的GetParentWindowHandle方法的返回值相对应的WinForm。
Alex D。