#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