Мы разрабатываем элемент управления пользовательского интерфейса в WPF для использования в существующем приложении Windows Forms/MFC (Rhino 3D).
Механизм приложения предоставляет возможность создать "док-станцию", которая по существу позволяет помещать элементы управления Windows Forms в дочернее окно, которое может состыковываться с интерфейсом Engines.
Я пытаюсь помещать простой текстовый элемент WPF внутри элемента управления ElementHost, который добавляется в Dockbar. Кажется, что на первый взгляд это работает нормально; но после попытки ввода в TextBox только определенные последовательности фактически отображаются в TextBox. DELETE, BACKSPACE, COPY, PASTE и ВЫБОР ТЕКСТА. Если вы наберете A-Z, 1-9 и т.д., Эти клавиши не отображаются.
У меня есть SCOURED сеть и вы слышали о ElementHost.EnableModelessKeyboardInterop()
, но это относится только к Windows WPF, созданным из формы. Я создаю WPF UserControls и размещаю их в элементе управления ElementHost.
Я увидел сообщение, в котором говорилось о Dispatcher.Run(), и это вроде работает, но нарушает остальную форму:
System.Windows.Threading.Dispatcher.Run();
События PreviewKeyUp, PreviewKeyDown, KeyUp и KeyDown запускаются в TextBox, но, увы, нет текст отображается в текстовом поле.
Я ничего не знаю о сообщениях Windows, но с помощью WinSpector я заметил, что из текстового поля не поступают сообщения WM_GETTEXT (если они даже не должны быть).
Я также создаю новый проект Windows Forms и делаю то же самое в нем, и он отлично работает, поэтому проблема должна быть связана с тем, как окна создаются и стыкуются в движке Rhino 3D.
Вот пример кода, который не работает:
ElementHost el = new ElementHost();
System.Windows.Controls.TextBox t = new System.Windows.Controls.TextBox();
t.Width = 100;
t.Text = "TEST";
el.Child = t;
panel1.Controls.Add(el);