2013-03-06 6 views
4

Я читал на MSDN и других веб-сайтах (http://msdn.microsoft.com/en-us/library/ms751797.aspx и http://www.abhishekshukla.com/wpf/advanced-wpf-part-5-of-5-interop-in-windows-presentation-foundation/), что многоуровневые гибридная вложенность WPF и WinForms управления не поддерживается ...WPF WinForms многоуровневого гибрида гнездящегося

У меня есть приложение, в котором окно WPF имеет WindowsFormsHost, где внутри элемент управления WPF размещен в ElementHost. Этот элемент управления WPF содержит другие элементы управления WinForms, которые также находятся в WinFormsHost. Вкратце: WPF -> WinForms -> WPF -> WinForms.

До сих пор у меня не было никаких проблем с этим. Узнав эту небольшую заметку на странице MSDN, мне интересно, что именно не поддерживается в этом сценарии, поскольку она работает для меня.

Любые идеи?

+0

Я сделал ctrl + F слова «hybrid» в указанной вами ссылке и не нашел этого во всем тексте. Как в сторону. Зачем ты это делаешь? Разве не было бы предпочтительнее оставаться с WPF и вообще отказаться от бесполезных выигрышей? –

+1

Я нашел слово «гибрид» в обеих ссылках, в ссылке MSDN его в поле «Примечание», которое начинается после трех строк текста введения. Я делаю это, потому что я должен использовать устаревшие элементы управления WinForms и хочу развить все новые вещи с помощью WPF. Иногда мне нужно поместить новый элемент управления WPF в элемент управления WinForms, иначе мне нужно разработать новые элементы управления в WinForms, которые я определенно не хочу – Harry13

+0

Могу ли я спросить, какие элементы управления winforms вам нужны? ... Кроме того, помимо ваших потребностей чтобы использовать его, я действительно не думаю, что это хорошая идея, чтобы смешивать их обоих таким образом. –

ответ

2

Я бы сказал, что чувство «не поддерживается» - это «на свой страх и риск». Большинство вещей будет работать, некоторые вещи не будут работать, и это зависит от вашего конкретного приложения, будут ли результаты приемлемыми. Или, может быть, вы добьетесь результатов, которые будут приемлемы после того, как будут предприняты некоторые хакерские обходные пути. MS не собирается уходить оттуда, чтобы заставить его работать.

Я работал с проектом, который содержал вложение WinForms-WPF-WinForms, и в целом это сработало - достаточно, чтобы не переписать компонент WinForms. Фокус - проблема - вложенный элемент управления не ведет себя так, как вы ожидали, связанного с полученными/потерянными событиями фокуса, а фокус клавиатуры может застрять во вложенном элементе управления. Может быть, существует разница между тем, считает ли хост-элемент его фокус, и делает ли он содержащийся элемент управления. Поэтому я бы предложил сосредоточиться на тестировании вокруг событий ввода и фокусировки.

+0

Спасибо, что поделились своим опытом! Могу ли я спросить, насколько глубоко вложен в ваш проект? – Harry13

+0

В этом случае только WF-WPF-WF, как описано (т.е. повторное использование устаревшего элемента управления в новом компоненте WPF в существующем приложении). –

+0

Я думаю, что это также зависит от типа вашего окна, если это WinForms, в котором вы используете инфраструктуру WinForms, и WPF обертывает в нее, если это WPF, вы используете инфраструктуру WPF, и WinForms завернуты в нее. И я думаю, что инфраструктура WPF должна лучше взаимодействовать с WinForms, чем с другим? – Harry13