[英]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.