У меня возникли проблемы при размещении формы 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.