发送到WPF TextBox的KeyDown事件不会触发文本输入

时间:2015-09-13 14:35:55

标签: c# wpf

我正在尝试模拟WPF TextBox控件的键盘输入(这样做的原因超出了本问题的范围)。但是,我很难让文字出现。

我制作了一个包含单个按钮和单个文本框的简单WPF应用程序,我想在单击按钮时模拟键盘按下,导致单个字符的文本(字母" A&# 34;)输入文本框。这就是我到目前为止所做的:

private void button_Click(object sender, RoutedEventArgs e)
{
    var key = Key.A;
    var target = textBox1; // Keyboard.FocusedElement;

    // None of these actually induce text to appear in the textbox
    target.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = Keyboard.PreviewKeyDownEvent });
    target.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = Keyboard.PreviewKeyUpEvent });
    target.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = Keyboard.KeyDownEvent });
    target.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = Keyboard.KeyUpEvent });
}

我已尝试将事件处理程序附加到文本框,我可以看到并验证文本框是否正在接收事件。但是,它们实际上都没有显示任何文字。

如何通过举办活动来触发文字输入?

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试过控制器的AutomationPeer,例如:

s = 'I am a string replaceme'

d = {
'replaceme':  'replace me'
 }

print(" ".join([w if w not in d else d[w] for w in s.split(" ")]))