Мы разрабатываем элемент управления пользовательского интерфейса в WPF для использования в существующем ядре приложений Windows Forms / MFC (Rhino 3D).
Движок приложения предоставляет возможность создания «панели Dock», которая, по сути, позволяет помещать элементы управления Windows Forms в дочернее окно, которое может пристыковываться к интерфейсу Engines.
Я пытаюсь поместить простой текстовый блок WPF в элемент управления ElementHost, который добавляется на панель Dockbar. На первый взгляд это работает нормально; но после попытки ввода в TextBox в TextBox действительно отображаются только определенные последовательности. DELETE , BACKSPACE , COPY , PASTE и ВЫБОР ТЕКСТА . Если вы вводите A-Z, 1-9 и т. Д., Эти клавиши не отображаются.
Я НАЧАЛ сеть и слышал о ElementHost.EnableModelessKeyboardInterop()
, но это относится только к Windows WPF, создаваемой из формы. Я только создаю пользовательские элементы управления WPF и размещаю их в элементе управления ElementHost.
Я видел пост, в котором говорилось о Dispatcher.Run (), и он вроде работает, но ломает остальную часть формы:
System.Windows.Threading.Dispatcher.Run();
События PreviewKeyUp , PreviewKeyDown , KeyUp и KeyDown происходят все в TextBox, но, увы, никакой текст не отображается в TextBox.
Я не очень разбираюсь в сообщениях Windows, но, используя WinSpector, я заметил, что из TextBox не приходят сообщения 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);