Окно WPF внутри панели WinformHost

#c# #.net #wpf #winforms-interop

#c# #.net #wpf #winforms-взаимодействие

Вопрос:

Я показываю окно WPF exe внутри другого приложения WPF, использующего winform host.

Я создал панель в главном приложении и установил ее как дочернюю для winformhost.

   mHostingPanel = new System.Windows.Forms.Panel()
            {
                BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
            };                


            mWinformHost = new WindowsFormsHost();
            mWinformHost.Child = mHostingPanel;
  

а затем я запускаю другой оконный процесс и устанавливаю панель хостинга в качестве родительской.

   WindowsAPI.SetParent(mProcess.MainWindowHandle, mHostingPanel.Handle);
  

Мой вопрос в том, если я запущу приложение, кто будет отображать мое дочернее окно WPF, родительским элементом которого является панель winform.Будет ли это контекст панели Direct-X или GDI?

Также, если я установлю Allowtransparency=True для дочернего приложения WPF, пользовательский интерфейс не будет отображаться на панели хостинга.

Комментарии:

1. Это зло, и не обязательно в плохом смысле!

2. Я не думаю, что принятие права собственности на окно вообще повлияет на рендеринг wpf. Я бы посмотрел на это, хотя: blogs.msdn.microsoft.com/oldnewthing/20130412-00/?p=4683

3. @tolanj: Если вы прочитаете эту запись в блоге, вы не сможете прийти к выводу, что это не обязательно зло. В очень, очень плохом смысле. Это другое приложение, безусловно, не готово к повторному родительству. Если бы это было так, это был бы элемент управления ActiveX.

4. Реальный вопрос не в том, кто отвечает за рендеринг. Реальный вопрос: работает ли ввод по-прежнему? И ответ на этот вопрос: нет. В какой-то момент это приведет к тупиковой ситуации.

Ответ №1:

Найдена причина.Это называется проблемой воздушного пространства (когда win32 и WPF пытаются совместно использовать пиксели), и я не думаю, что это может быть решено каким-либо API-интерфейсом, поскольку Microsoft отрицала это. https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2644120-bring-back-the-hwndhost-isredirected-and-compositi

Устранение проблем с воздушным пространством