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