Как смоделировать ввод текста в текстовый блок 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
(вы можете соответствующим образом изменить это).