Как смоделировать ввод текста в текстовый блок WPF?

Я хочу, чтобы имитировать пользовательский ввод в текстовом поле WPF. Я хочу ввести такой символ, чтобы запускалось событие OnPreviewTextInput. Я попытался установить свойство Text через текст, но это не вызвало события:

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

Можно ли каким-либо образом инициировать событие?

Ответы

Ответ 1

См. ответ на Как я могу программно генерировать события нажатия клавиш на С#? для хорошего описания того, как имитировать входные события.

Вы также можете сделать:

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

Это вызовет событие PreviewTextInput, а затем поднимет событие TextInput и изменит текст.

Ответ 2

Другой способ сделать это можно с помощью WinAPI, SendMessage, чтобы быть конкретным:

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

Затем вызовите его таким образом, когда фокус находится в TextBox:

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

0x0102 - это постоянное значение для WM_CHAR, а 72 - код ключа для H (вы можете соответствующим образом изменить это).