FindForm и WPF - PullRequest
       2

FindForm и WPF

2 голосов
/ 27 октября 2010

У меня есть приложение с WinForm (myForm).

В этой WinForm есть WPF UserControl (myWPF).

В этом WPF UserControl есть WinForm UserControl (myWinCtrl).

У myWinCtrl есть пользовательский WinGrid (myWinGrid).

myWinGrid внутренне this.FindForm() и .... не находит myForm ...

Есть ли способ переопределить метод FindForm, чтобы он включал возможность промежуточного уровня WPF?

myGrid => myWinFormUC => Host => WpfUC => Host => myWinForm

Итак, мне нужно myGrid находит myWinForm

1 Ответ

0 голосов
/ 27 октября 2010

Вы можете использовать PInvoke с GetAncestor , чтобы напрямую получить форму верхнего уровня, содержащую ваш элемент управления.

В этот момент вы можете сравнить полученный IntPtr с дескрипторами в каждой форме Application.OpenForms, чтобы найти фактический экземпляр формы Windows Forms.


Возможным методом грубой силы может быть использование Control.PointToScreen с центром вашего элемента управления, а затем поиск в ваших Application.OpenForms любых активных форм, содержащих эту точку. Сложная часть будет обрабатываться, если у вас есть перекрывающиеся формы, но только одна должна быть активной, поэтому, если это происходит в ответ на действие пользовательского интерфейса, активная форма в этом месте должна быть правильной формы ...

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