WPF - 发送密钥Redux

mmc*_*rey 11 c# keyboard wpf keyboard-shortcuts wpf-controls

所以,我正在使用硬编码的第三方wpf网格控件,只接受某些击键来执行快捷反应,其中一个是Shift-Tab.但是,我的用户群用于点击向上箭头并告诉他们"不"现在不是一个选项.所以我认为我唯一的选择是截取预览键并发送不同的击键组合.

现在,我使用以下代码在此处发送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);
}
Run Code Online (Sandbox Code Playgroud)

但是,这种方法的局限性在于您似乎无法模拟按下Shift键?WPF似乎看看Keyboard.Modifiers能够"读取"Shift或Ctrl,但似乎没有任何工具以编程方式设置Keyboard.Modifiers.有帮助吗?

REA*_*REW 0

我使用以下内容模拟你所说的很好,这不是你的意思吗?

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);
}
Run Code Online (Sandbox Code Playgroud)

输出:

LeftShift
Tab
Run Code Online (Sandbox Code Playgroud)

  • @REA_ANDREW:您看到这种情况发生是因为“Keys”不是可以组合的标志,它是一个枚举,其中“Key.LeftShift = 116”和“Key.Tab = 3”。结果是 119,映射到“Key.RightCtrl = 119”(当光标位于“Key”上时,在 Visual Studio 中按 F12 打开定义)。 (5认同)