Как найти в коде родительское окно или WinForm элемента управления WPF? - PullRequest
4 голосов
/ 16 июня 2010

У меня есть ситуация, когда мне нужно найти родительское окно или WinForm, в котором находится элемент управления WPF. Мне нужно получить дескриптор родительского окна или WinForm в любом случае.

Проблема заключается в том, что элемент управления WPF размещен в WinForm с использованием ElementHost. Как найти дескриптор хостинга WinForm из элемента управления WPF.

Ответы [ 2 ]

3 голосов
/ 16 июня 2010

Просто разобрался!

var presentationSource = (HwndSource)PresentationSource.FromVisual(child);
var parentHandle = presentationSource.Handle;
1 голос
/ 18 ноября 2010
[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, чтобы найти WinForm, соответствующую возвращаемому значению метода GetParentWindowHandle, приведенному выше.

Алекс Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...