У меня возникли проблемы при размещении формы WinForms в рамках WindowsFormsHost
и навигации по вкладкам. Чтобы решить, я сделал этот простой пример:
- Созданный WPF
Window
(начальная точка приложения) - Созданы WinForms
Form
с двумяTextBox
на нем - Окно WPF: добавлено
WindowsFormsHost
к нему - Окно WPF: добавлен обработчик
OnLoaded
- Окно WPF: добавлено
TextBox
, расположенное подWindowsFormsHost
В обработчике OnLoaded
я получил:
System.Windows.Forms.Form f = new WinFormsForm();
f.TopLevel = false;
f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.windowsFormsHost1.Child = f;
Когда я сейчас запустил приложение:
- Ничего не сфокусировано (ok)
- Я нажимаю на первый
TextBox
вWindowsFormsHost
, он получает фокус (ok) - Я нажимаю вкладку, фокус переходит на 2-й
TextBox
вWindowsFormsHost
(ok) - Я снова нажимаю вкладку, фокус возвращается к 1-му
TextBox
вWindowsFormsHost
( не ok; должен оставитьWindowsFormsHost
и задать фокус в текстовое поле внизу WPF окно) - Я нажимаю на текстовое поле в wpf (помещается после и под
WindowsFormsHost
), он получает фокус (ok) - Я нажимаю вкладку, фокус переходит в 1-ое текстовое поле в
WindowsFormsHost
- так как он должен начинаться после завершения. Так что это тоже нормально. - Я снова нажимаю текстовое поле wpf и нажимаю shift + tab, фокус переходит во 2-й текстовый блок в
WindowsFormsHost
(ok) - Я нажимаю вкладку, фокус переходит к 1-му текстовому полю в
WindowsFormsHost
(идет в начало в WFH) ( не ok)
Как заставить фокус вести себя, как если бы у меня были только элементы управления одного типа? В этом случае указывается порядок вкладок WFH-1st-Textbox, WFH-2nd-Textbox, WPF-Textbox.