2010-08-04 5 views
13

Ich mag Benutzereingaben zu einer WPF TextBox simulieren. Ich möchte ein Zeichen eingeben, so dass das OnPreviewTextInput-Ereignis ausgelöst wird. Ich versuchte, den Text durch die Text-Eigenschaft, aber dies das Ereignis nicht ausgelöst werden:Wie simuliere ich Texteingabe in eine WPF TextBox?

public void SomeFunction() 
{ 
    var textBox = new TextBox(); 
    textBox.Text = "A";      
} 

Kann ich das Ereignis explizit irgendwie auslösen?

Antwort

21

Siehe die Antwort auf How can I programmatically generate keypress events in C#? für eine gute Beschreibung, wie Eingabeereignisse zu simulieren.

Sie könnten auch tun:

TextCompositionManager.StartComposition(
    new TextComposition(InputManager.Current, textBox, "A")); 

Dies wird das Preview Ereignis auslösen und dann das TextInput- Ereignis auslösen und den Text ändern.

+0

Thanx! Genau das, was ich brauchte! – stiank81

+0

Was ist mit Rücktaste? – Jordan

+5

@ Jordan: Sie sollten das nur als eine neue Frage stellen. Sie könnten die Suche nach etwas wie 'EditingCommands.Backspace.Execute (null, textBox);', aber es ist schwer, ohne genauer zu sagen. – Quartermeister

4

Ein anderer Weg, dies zu tun, indem sie mit WinAPI wäre, Sendmessage spezifisch zu sein:

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); 

es dann so nennen, wenn der Fokus auf dem Text ist:

SendMessage(new WindowInteropHelper(this).Handle, 0x0102, 72, 0) 

0x0102 ist der konstante Wert für WM_CHAR und 72 ist der Schlüsselcode für H (Sie können dies entsprechend ändern).

+1

Dank für die gemeinsame Nutzung, aber ich finde Quartermeister Lösung saubere und einfacher. – stiank81

+0

Es ist immer gut, mehr als eine mögliche Lösung zu kennen. –

+0

Ja, sicher! Deshalb habe ich dir +1 gegeben :-) – stiank81