Действительно ли безопасно отображать окно WPF из формы WinForms?
Я хотел бы отобразить окно WPF из приложения Windows Forms (.NET 3.5).
Этот код работает без проблем в примере проекта:
public partial class WinFormsForm1 : Form
{
public WinFormsForm1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
WpfWindow1 w = new WpfWindow1();
w.Show();
}
}
Форма начинается с Main()
в виде обычной формы Winforms:
Application.Run(new WinFormsForm1());
Мне кажется, что это слишком легко, чтобы быть правдой. Есть ли недостатки в этом? Безопасно ли это делать?
Ответы
Ответ 1
У него есть один серьезный недостаток: безмодовое окно WPF не получит ввод с клавиатуры.
Вызов метода EnableModelessKeyboardInterop
должен быть добавлен до отображения окна WPF:
WpfWindow1 w = new WpfWindow1();
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(w);
w.Show();
ElementHost находится в файле WindowsFormsIntegration.dll.
Дополнительная литература: http://msdn.microsoft.com/en-us/library/aa348549.aspx
Ответ 2
Итог: это так.
У нас довольно сложное приложение, объединяющее как WPF, так и winforms: окна, пользовательские элементы управления, модальные диалоги, вы называете это... и работает на медицинском рынке.
У нас есть некоторые темные углы, один из них - позорный EnableModelessKeyboardInterop, другой - окно WPF, являющееся дочерним положением окна Winforms, которое вы можете прочитать Здесь
Ответ 3
Это действительно так просто. Я не могу придумать, чтобы любой недостаток делал это таким образом.