Wie kann ich verhindern, dass Eingabesteuerelemente das Leerzeichen aus dem TextCompositionManager stehlen?
Mit dieser Frage verwandt (aber nicht betrogen!):Helfen Sie mit den WPF TextCompositionManager-Ereignissen
Bei Verwendung derTextCompositionManager Ich habe ein Problem, bei dem, wenn ein Eingabesteuerelement wie die TextBox den Fokus hat, die TextBox das Leerzeichen "stiehlt", bevor ich die Chance bekomme, darauf zu reagieren.
Zum Beispiel haben wir den folgenden Code:
<code>public Window1() { TextCompositionManager.AddPreviewTextInputStartHandler (this, PreviewTextInputStartHandler); } private void PreviewTextInputHandler(object sender, TextCompositionEventArgs e) { CaptureTextBlock.Text += e.Text; e.Handled = true; } </code>
wo Window1 aussieht:
<code><!--standard window crap above here--> <StackPanel> <TextBlock Name="CaptureTextBlock" /> <TextBox Name="ThievingBastard" /> </StackPanel> <!-- snip --> </code>
Wenn ich nun diese Anwendung ausführe und sofort "Ich habe diebische Bastarde" eingebe, enthält der TextBlock den Text "Ich habe diebische Bastarde" und das Textfeld ist leer.
Wenn ich jedoch das Textfeld fokussiere (d. H. Das Textfeld hat Tastaturfokus), enthält der Textblock nach dem Eingeben der obigen Zeile den Text "Ihaetthievingbastards" und das Textfeld enthält den Text "" (3 Leerzeichen).
Ich habe zwei Fragen:
1) Kann ich dies nur mit den vom TextCompositionManager bereitgestellten Funktionen verhindern?
2) Wenn nicht, wo zum Teufel schließe ich den Texteingabestapel an, damit ich kannvöllig Steuern der Texteingabe in meiner WPF-Anwendung (negative Punkte, um überhaupt über p / invoking nachzudenken) (Sie haben gerade darüber nachgedacht, negative Punkte hinzugefügt)
Aktualisieren
Ich verwende eine hackige Problemumgehung, bei der ich das KeyDown-Tunneling-Ereignis aus dem InputManager nur für Leerzeichen behandle. Diese Methode ist sehr umständlich, ineffizient und stinkt grundsätzlich. Immer noch auf der Suche nach einem besseren Weg.