Как я могу запретить элементам управления вводить символ пробела из 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 только для пробелов. Этот метод очень неудобен, неэффективен и в основном воняет. Все еще ищу лучший путь.

Ответы на вопрос(1)

Ваш ответ на вопрос