繁体   English   中英

在WPF中模拟按键

[英]Simulating Key Presses in WPF

我正在为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

请查看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); 

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

首先,伪UML图是这样的:

类依赖图

您的三个函数将实现如下(伪代码):

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM