我有一種情況,我需要找到承載WPF控件的父窗口或WinForm。無論情況如何,我都需要獲得父窗口或WinForm的句柄。如何在代碼中找到WPF控件的父窗口或WinForm?
問題是什麼時候使用ElementHost將WPF控件託管在WinForm中。我如何從WPF控件找到託管WinForm的Handle。
我有一種情況,我需要找到承載WPF控件的父窗口或WinForm。無論情況如何,我都需要獲得父窗口或WinForm的句柄。如何在代碼中找到WPF控件的父窗口或WinForm?
問題是什麼時候使用ElementHost將WPF控件託管在WinForm中。我如何從WPF控件找到託管WinForm的Handle。
只是想通了!
var presentationSource = (HwndSource)PresentationSource.FromVisual(child);
var parentHandle = presentationSource.Handle;
[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.