W jaki sposób mogę zapobiec kradzieży znaku spacji z kontrolek TextCompositionManager przez formanty wejściowe?

Powiązane (ale nie oszustwo!) Z tym pytaniem:Pomoc w przypadku zdarzeń WPF TextCompositionManager

Podczas korzystania zTextCompositionManager Mam problem, w którym, jeśli kontrola wejścia, taka jak TextBox, ma fokus, TextBox „ukradnie” znak spacji, zanim będę miał szansę na jego działanie.

Na przykład mamy następujący kod:

<code>public Window1()
{
  TextCompositionManager.AddPreviewTextInputStartHandler
    (this, PreviewTextInputStartHandler);
}

private void PreviewTextInputHandler(object sender, TextCompositionEventArgs e)
{
  CaptureTextBlock.Text += e.Text;
  e.Handled = true;
}
</code>

gdzie wygląda Window1:

<code><!--standard window crap above here-->
<StackPanel>
  <TextBlock Name="CaptureTextBlock" />
  <TextBox Name="ThievingBastard" />
</StackPanel>
<!-- snip -->
</code>

Teraz, jeśli uruchomię tę aplikację i natychmiast napiszę „I haet thieving bastards”, TextBlock będzie zawierał tekst „I haet thieving bastards”, a pole tekstowe będzie puste.

Jeśli jednak skupię pole tekstowe (tzn. Pole tekstowe ma fokus na klawiaturze), po wpisaniu powyższego wiersza blok tekstowy będzie zawierał tekst „Ihaetthievingbastards”, a pole tekstowe będzie zawierać tekst „” (3 spacje).

Mam dwa pytania:
1) Czy mogę temu zapobiec, korzystając tylko z funkcji udostępnianych przez TextCompositionManager?
2) Jeśli nie, to gdzie, do diabła, podłączam się do stosu wprowadzania tekstu, aby móccałkowicie kontrolować wprowadzanie tekstu w mojej aplikacji WPF (punkty ujemne za równe myślenie o p / wywołanie) (pomyślałeś o tym, dodano punkty ujemne)?

Aktualizacja

Używam hacky obejścia, w którym obsługuję tunelowanie zdarzenia KeyDown z InputManager tylko dla spacji. Ta metoda jest bardzo niewygodna, nieefektywna i zasadniczo śmierdzi. Wciąż szukam lepszego sposobu.

questionAnswers(1)

yourAnswerToTheQuestion