2010-11-29 2 views
0

Я использую анимацию, чтобы показать пользовательское всплывающее окно showdialog (пограничный контроль с некоторыми TextBlock и Button). После принятия WinFormHost, если iam запускает анимацию, пограничный контроль и другие будут отставать от WinFormHost. Есть ли для этого раунд?WindowsFormHost не допускает управление элементами управления сверху?

ответ

3

Нет обходного пути для этого, если вы хотите, чтобы содержимое WPF и Windows Forms делилось одним и тем же окном.

WPF предоставляет через Direct3D, тогда как Windows Forms использует GDI +, который в конечном итоге основан на старых механизмах рендеринга GDI32. Сама Windows не предоставляет способ визуализации в один и тот же регион окна с этими двумя разными технологиями - вы получаете HWND, принадлежащий Direct3D (как используется WPF), а другой HWND принадлежит и обрабатывается Windows Формы. Эти HWNDs вырезают пространство в их содержащем окне между ними и не могут перекрываться.

Если вы хотите перекрывающихся WPF и содержимое Windows Forms, единственный поддерживаемый способ сделать это, чтобы положить их в отдельных окнах верхнего уровня - Windows делает поддержку перекрывающийся Win32 и содержание Direct3D на уровне рабочего стола. Вы можете использовать прозрачность в пикселях для создания непрямоугольного окна (либо в WPF, либо в Windows Forms). Таким образом, вы можете отключить все границы окна в своем приложении WPF и сделать фон прозрачным, и если вы включили прозрачность, вы можете поместить это окно точно в том же месте на экране, что и окно Windows Forms, после чего теперь вы можете иметь содержимое WPF поверх содержимого Windows Forms.

Излишне говорить, что это утомительная вещь. Но, к сожалению, это то, что вам нужно сделать, если вам действительно нужен контент WPF поверх содержимого Windows Forms - вам нужно поместить содержимое WPF в отдельное окно.

Смежные вопросы