WPF Interop & amp; Диалоги
Вопрос
У меня есть приложение WinForms, для которого я сейчас разрабатываю новые биты в WPF. Дела идут неплохо, и я столкнулся с моей первой потребностью в диалоге.
Я бы хотел сделать диалог в WPF. Похоже, что мне нужно будет выполнить UserControl для фактического контента, а затем разместить этот контент через форму WinForms с ElementHost (так как UserControl не имеет метода ShowDialog ()).
И вот где мой вопрос. Как это работает? Насколько я могу судить, WPC UserControl даже не имеет свойства DialogResult (что имеет смысл, учитывая, что у него нет метода ShowDialog ()) - мне кажется, что мне нужен элемент управления WPF Window - а у меня нет думаю, что я могу использовать это в этом случае.
Борьба с основным потоком и настройкой вещей здесь. Может ли кто-нибудь зажечь свет?
Это вообще возможно?
Решение
Вы можете открыть окно WPF из приложения WinForms.
Просто создайте окно и вызовите ShowDialog ()
. CLR загрузит платформу WPF и откроет окно.
Другие советы
Если вы хотите, чтобы ваше приложение взаимодействия работало в основном как приложение WinForms, то описанный вами подход работает нормально - у меня почти такая же вещь в моих случаях взаимодействия.
WPF поддерживает MessageBoxes (хотя и немного отличную от WinForms версию), и вы можете собрать что-то вместе, используя WPF Windows (расширив его, добавив что-то похожее на DialogResult). Однако предоставляемые элементы управления WPF предполагают, что они пытаются изменить UX-взаимодействия, чтобы минимизировать диалоги, особенно модальные.
Чтобы сделать вашу жизнь проще, я бы создал подкласс WinForms Form / ElementHost специально для работы с хостингом содержимого WPF и в зависимости от того, насколько вы чисты, используя " объявлений, заключая в себе собственное перечисление, подобное DialogResult, чтобы вам не приходилось включать пространство имен System.Windows.Forms, что может сделать ваши кодовые компоненты WPF более громоздкими.