WPF TextBox не принимает входные, пространственные и обратные пространства

У меня есть текстовое поле внутри usercontrol, и я добавляю usercontrol в MainWindow со следующим XAML:

 <Views:MyUserControl />

У меня есть один TextBox в MyUserControl, проблема в том, что TextBox не принимает никаких данных. Backspace och space работает, но если я нажимаю буквы och, текст не добавляется в TextBox.

Я убедился, что текст не просто скрыт в TextBox. Я также попытался добавить RichTextBox в MyUserControl с тем же результатом, он не принимает никаких входных данных (помимо пробела och backspace).

Я также попытался добавить TextBox в MainWindow с тем же результатом; он не принимает никаких входных данных (помимо пробела och backspace).

Также MyUserControl добавляется в TabControl и TabItem.

Любые подсказки?

Изменить: Дополнительная информация Забыл написать, что я открываю/создаю Окно WPF из приложения WinForm. Когда я устанавливаю свой проект запуска в VS10 в качестве своего WPF-проекта, он отлично работает с вводом клавиатуры в TextBox.

Как получилось?

Открытие/создание моих окон WPF со следующим кодом:

MyWpfProject.MainWindow mw = new MyWpfProject.MainWindow();
mw.Show();

Изменить: решение Поэтому я предполагаю, что моя настоящая проблема заключалась в том, что был открыт проект WPf из приложения WinForms.

Я добавил следующий код:

MyWpfProject.MainWindow mw = new MyWpfProject.MainWindow();
ElementHost.EnableModelessKeyboardInterop(mw);
mw.Show();

"Вызов EnableModelessKeyboardInterop() необходим для обработки ввода с клавиатуры в окне WPF, если он загружен с не WPF-хоста, такого как WinForms". http://weblogs.asp.net/jdanforth/archive/2008/07/29/open-a-wpf-window-from-winforms.aspx

Ответ 1

Отвечайте на мой собственный вопрос (если кто-то другой сталкивается с той же проблемой): Если вы открываете WPF-форму из приложения WinForms, вы должны сделать следующее, чтобы получить ввод с клавиатуры:

MyWpfProject.MainWindow mw = new MyWpfProject.MainWindow();
ElementHost.EnableModelessKeyboardInterop(mw);
mw.Show();

"Вызов EnableModelessKeyboardInterop() необходим для обработки ввода с клавиатуры в окне WPF, если он загружен с не WPF-хоста, такого как WinForms". http://weblogs.asp.net/jdanforth/archive/2008/07/29/open-a-wpf-window-from-winforms.aspx

Ответ 2

Возможно, ваш пользовательский элемент управления получает событие клавиатуры вместо вашего текстового поля? попробуйте выполнить поиск таким образом, это происходит с помощью кнопок мыши.

Ответ 3

У меня была та же проблема, но моя среда была построена так, что я не мог применить решение выше. Как оказалось, это не проблема. Это было намного проще, чем ожидалось.

Я размещаю пользовательский элемент управления WPF внутри WinForms. Мой WinForms MainView (форма запуска) переопределил "ProcessCmdKey". Из-за логических ошибок он ничего не возвращал.

Тем не менее, я получил все ключевые события в коде в моем XAML файле, но эти события никогда не обновляли "Текст" моего текстового поля. Только пространство и назад сделали это, и это были ключевые события, которые я не получил в коде.

Итак, если вы не думаете о простейшем решении здесь, это для VB.NET.

STRG + F "ProcessCmdKey" и убедитесь, что вы вернули правильное значение, вы можете полностью раскомментировать его, чтобы убедиться, что он не вызывает у вас такой же проблемы, как и для меня.