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.