我发现这个答案看起来像我需要的:
除了事实我不能创建一个实例KeyEventArgs(我不知道如何)
有问题的代码是:
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), //<--- HERE, I can't
0,
key)
{ RoutedEvent=routedEvent }
);
Run Code Online (Sandbox Code Playgroud)
编译器说:
The best overloaded method match for
'System.Windows.PresentationSource.FromDependencyObject(System.Windows.DependencyObject)'
has some invalid arguments
Run Code Online (Sandbox Code Playgroud)
ide说:
参数类型IInputElement不能分配参数类型DependencyObject
在StackOverflow中,我找到了几个指向答案的答案,但没有一个解决如何在第一时间创建实例.
我怎样才能做到这一点?
Osc*_*Ryz 53
phewwww
我发现它:Keyboard.PrimaryDevice.ActiveSource必须使用
InputManager.Current.ProcessInput(
new KeyEventArgs(Keyboard.PrimaryDevice,
Keyboard.PrimaryDevice.ActiveSource,
0, Key.Tab)
{
RoutedEvent = Keyboard.KeyDownEvent
}
);
Run Code Online (Sandbox Code Playgroud)
Eli*_*gne 14
与Bill Tarbell的答案类似,您也可以创建一个虚拟的System.Windows.Interop.HwndSource,如下所示:
var kea = new KeyEventArgs(
Keyboard.PrimaryDevice,
new HwndSource(0, 0, 0, 0, 0, "", IntPtr.Zero), // dummy source
0,
key);
Run Code Online (Sandbox Code Playgroud)
Bil*_*ell 11
如果有人试图创建KeyEventArgs用于单元测试,你会发现Keyboard.PrimaryDevice.ActiveSource为null ..并在你尝试使用它时抛出异常.
模拟PresentationSource是一个可行的解决方案(需要sta):
[Test]
[RequiresSTA]
public void test_something()
{
new KeyEventArgs(
Keyboard.PrimaryDevice,
new Mock<PresentationSource>().Object,
0,
Key.Back);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15755 次 |
| 最近记录: |