创建覆盖默认操作的键盘和弦 (CTRL-V)

Creating a Keyboard Chord Which Overrides a Default Action (CTRL-V)

我的目标是从 Visual Studio 编辑器复制键盘和弦组合 Ctrl+E+ V 复制该行。 需要说明的是,这不是关于如何复制一行的问题,而是在 WPF 中处理键盘和弦场景的问题。

和弦如何完成


我试过了

<KeyBinding Gesture="Ctrl+E" Command="{Binding cmdSetChord_E}"/>
<KeyBinding Gesture="Ctrl+V" Command="{Binding cmdDuplicateCurrent}"/>

bool ePressed;

private void tbPatternDesign_KeyDown(object sender, KeyEventArgs e)
{
    if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.E)
        ePressed = e.Handled = true;

    if (ePressed && Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.V)
    {
        MessageBox.Show("Duplicate");
        e.Handled = true;
        ePressed = false;
    }
}

无果。

尝试使用

Console.readkey()

这可能不是最直观的方法,但它是一个很好的解决方案。

怎么样:

Keyboard.IsKeyDown(Key.E) && Keyboard.IsKeyDown(Key.V) && ...

您可以使用 CommandBinding 覆盖控件的默认命令实现。这是带有 TextBox.

的示例
<TextBox>
    <TextBox.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Paste" Executed="CommandBinding_Executed"/>
        <CommandBinding Command="EditingCommands.AlignCenter" Executed="CommandBinding_Executed"/>
    </TextBox.CommandBindings>
    <TextBox.InputBindings>
        <KeyBinding Command="EditingCommands.AlignCenter" Gesture="CTRL+E"/>
    </TextBox.InputBindings>
</TextBox>

    bool ePressed;

    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        switch (((RoutedUICommand)e.Command).Text)
        {
            case "Paste":
                if (ePressed)
                {
                    MessageBox.Show("Duplicate");
                    ePressed = false; 
                }
                else
                    ((TextBox)sender).Paste();
                break;
            case "AlignCenter":
                ePressed = true;
                break;
        }
    }