Как имитировать ввод текста в текстовое поле WPF? - PullRequest
13 голосов
/ 04 августа 2010

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

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

Могу ли я как-то явно вызвать событие?

Ответы [ 2 ]

22 голосов
/ 04 августа 2010

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

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

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

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

4 голосов
/ 04 августа 2010

Еще один способ сделать это - использовать 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 (вы можете изменить это соответственно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...