var key = Key.Insert; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(target),
0,
key)
{ RoutedEvent=routedEvent }
);
此解决方案不依赖于本机调用或 Windows 内部机制,应该比其他方案更可靠。它还允许您模拟特定元素上的按键。
var text = "Hello";
var target = Keyboard.FocusedElement;
var routedEvent = TextCompositionManager.TextInputEvent;
target.RaiseEvent(
new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, target, text))
{ RoutedEvent = routedEvent }
);
还要注意:
控件期望接收预览
events, for example PreviewKeyDown
应该在 KeyDown 之前
使用 target.RaiseEvent (...)将事件直接发送到目标
没有元处理,比如
加速器,文本组成和
这通常是你想要的。
另一方面,如果你真的这么想
what to simulate actual keyboard keys
出于某种原因,你会使用
而不是 InputManager.ProcessInput ()。