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



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

如何完成和弦

  • Ctrl V单机版不会触发自定义行复制命令,并且当1E1没有时,就不会处理
    • AKA返回系统进行粘贴
    • 这不是一个交易破坏者,如果可以的话,我可以处理剪贴板

我试过

<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;
}
}

但无济于事。

您可以使用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;
}
}

怎么样:

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

尝试使用

Console.readkey()

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

最新更新