我正在为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
。
答案 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图是这样的:
您的三个功能将按如下方式实现(伪代码):
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。