Как я могу запретить элементам управления вводить символ пробела из TextCompositionManager?
Связанный (но не глупый!) С этим вопросом:Помощь по событиям WPF TextCompositionManager
При использованииTextCompositionManager У меня возникла проблема, когда, если элемент управления вводом, такой как TextBox, имеет фокус, TextBox будет "красть"; космический персонаж, прежде чем я смогу получить шанс действовать по нему.
Например, у нас есть следующий код:
<code>public Window1() { TextCompositionManager.AddPreviewTextInputStartHandler (this, PreviewTextInputStartHandler); } private void PreviewTextInputHandler(object sender, TextCompositionEventArgs e) { CaptureTextBlock.Text += e.Text; e.Handled = true; } </code>
где Window1 выглядит так:
<code><!--standard window crap above here--> <StackPanel> <TextBlock Name="CaptureTextBlock" /> <TextBox Name="ThievingBastard" /> </StackPanel> <!-- snip --> </code>
Теперь, если я запускаю это приложение и сразу же набираю "Я ненавижу воровских ублюдков", TextBlock будет содержать текст "Я ненавижу воровских ублюдков" и текстовое поле будет пустым.
Если, однако, я выделю текстовое поле (т.е. текстовое поле будет иметь фокус клавиатуры), после ввода вышеуказанной строки текстовое поле будет содержать текст «Ihaetthivingbastards». и текстовое поле будет содержать текст & quot; & Quot; (3 пробела).
У меня есть два вопроса:
1) Могу ли я предотвратить это только с помощью средств, предоставляемых TextCompositionManager?
2) Если нет, то где, черт возьми, я подключаюсь к стеку ввода текста, чтобы я могfully контролировать ввод текста в моем приложении WPF (отрицательные моменты, даже если подумать о p / invoking) (вы только что подумали об этом, добавили отрицательные моменты)?
Update
Я использую хакерский обходной путь, когда я обрабатываю туннельное событие KeyDown из InputManager только для пробелов. Этот метод очень неудобен, неэффективен и в основном воняет. Все еще ищу лучший путь.