在WPF中模拟按键

时间:2012-02-27 17:06:54

标签: c# .net wpf input touch

我正在为WPF触控应用程序开发一个屏幕上的小键盘。这将显示在Popup中。当按下按钮时,它应该向应用程序发送击键,使其看起来好像用户正在键入TextBox。这是我的代码:

// 'key' is set beforehand
InputManager.Current.ProcessInput(new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, Environment.TickCount, key) { RoutedEvent = Control.KeyDownEvent });

这是在Button.Click事件处理程序中调用的。

到目前为止只有Key.Back有效。没有数字键可以工作,Key.Decimal也没有。

编辑:我认为使用SendKeys可以解决问题,但它只是做同样的事情。

为什么我的数字按钮不起作用?我已经确认正在传递正确的Key

2 个答案:

答案 0 :(得分:0)

看看http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b657618e-7fc6-4e6b-9b62-1ffca25d186b/。 WPF文本框在处理某些键时存在问题。

来自文章:

var eventArgs = new TextCompositionEventArgs(Keyboard.PrimaryDevice, 
new TextComposition(InputManager.Current, Keyboard.FocusedElement, key));  
eventArgs.RoutedEvent = TextInputEvent;  

InputManager.Current.ProcessInput(eventArgs); 

答案 1 :(得分:0)

在我们的评论讨论之后,我建议您考虑这样的方法。我不知道完整的要求,但是将功能分开并使应用程序不那么单一,总是一种很好的方法!

首先,伪UML图是这样的:

Class depedendency diagram

您的三个功能将按如下方式实现(伪代码):

UserControl1.InsertCharacter(string character)
{
    textBox1.Text = textBox1.Text.Insert(textBox1.CaretIndex, character); 
    this.ValidateInput();
}

UserControl1.ValidateInput()
{
    // Perform validation
}

UserControl1.OnKeyDown()
{
    // Perform validation
    this.ValidateInput();
}

UserControl2.AppendCharacter(string clickedCharacter)
{
    this.userControl1.InsertCharacter(clickedCharacter); 
}

如我所述,为了进一步将UserControl2与UserControl1分离,您可以使用事件模式,例如.NET事件或EventAggregator。