C# WPF-发送密钥重发

C# WPF-发送密钥重发,c#,wpf,keyboard,wpf-controls,keyboard-shortcuts,C#,Wpf,Keyboard,Wpf Controls,Keyboard Shortcuts,所以,我使用的是第三部分wpf网格控件,它被硬编码为只接受某些击键来执行快捷反应,其中之一就是Shift Tab。 然而,我的用户群习惯于点击向上箭头和向下箭头,告诉他们“不”现在不是一个选项。因此,我认为我唯一的选择是截取预览关键点并发送不同的关键点笔划组合 现在,我使用在这里找到的以下代码在用户按下向下箭头时发送选项卡: if (e.Key == Key.Down) { e.Handled = true; KeyEventArgs eInsertBack = new KeyE

所以,我使用的是第三部分wpf网格控件,它被硬编码为只接受某些击键来执行快捷反应,其中之一就是Shift Tab。 然而,我的用户群习惯于点击向上箭头和向下箭头,告诉他们“不”现在不是一个选项。因此,我认为我唯一的选择是截取预览关键点并发送不同的关键点笔划组合

现在,我使用在这里找到的以下代码在用户按下向下箭头时发送选项卡:

if (e.Key == Key.Down)
{
    e.Handled = true;
    KeyEventArgs eInsertBack = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab);
    eInsertBack.RoutedEvent = UIElement.KeyDownEvent;
    InputManager.Current.ProcessInput(eInsertBack);
}

但是,这种方法的局限性在于,您似乎无法模拟按下Shift按钮?WPF似乎在看键盘。修饰符可以“读取”Shift或Ctrl键,但似乎没有任何工具可以通过编程设置键盘。修饰符。有什么帮助吗?

我很好地模拟了你说的话,使用下面的方法,这不是你的意思吗

public Window1()
{
    InitializeComponent();


    Loaded += new RoutedEventHandler(Window1_Loaded);
}

void Window1_Loaded(object sender, RoutedEventArgs e)
{
    WebBrowser1_PreviewKeyDown(this, new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 1, Key.LeftShift));
    WebBrowser1_PreviewKeyDown(this, new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 1, Key.Tab));
}

private void WebBrowser1_PreviewKeyDown(object sender, KeyEventArgs e)
{
    System.Diagnostics.Debug.WriteLine(e.Key);
}
输出:

LeftShift
Tab
试试这个

System.Windows.Forms.SendKeys.SendWait("{Tab}");

在WPF应用程序中,SendKeys.Send不工作,但工作正常。

创建一个类似这样的模拟键盘设备(Jared Parsons很荣幸):

用法:

var modKey = ModifierKeys.Shift;
var device = new MockKeyboardDevice(InputManager.Current)
    {
        ModifierKeysImpl = modKey
    };
var keyEventArgs = device.CreateKeyEventArgs(Key.Tab, modKey);
...
用法示例:


谢谢,但我想这不是问题所在。我要找的是同时使用Shift-Tab的按键组合。嗯,我明白了。这很奇怪,因为使用Key.LeftShift | Key.Tab会导致CtrlLeft,原因很奇怪,但可能很好。当我离开时,我会进行更多的调查can@REA_ANDREW:出现这种情况是因为
不是可以组合的标志,它是一个枚举,其中
Key.LeftShift=116
Key.Tab=3
。结果是119,它映射到
Key.RightCtrl=119
(当光标位于
Key
上时,在Visual Studio中按F12以打开定义)。