创建覆盖默认操作的键盘和弦 (CTRL-V)
Creating a Keyboard Chord Which Overrides a Default Action (CTRL-V)
我的目标是从 Visual Studio 编辑器复制键盘和弦组合 Ctrl+E+ V 复制该行。 需要说明的是,这不是关于如何复制一行的问题,而是在 WPF 中处理键盘和弦场景的问题。
和弦如何完成
- CtrlV独立不会触发自定义行复制命令,只是不被处理 当 E 有 not 伴随它。
- 也就是回退到系统进行粘贴。
- 这不是交易破坏者,如果是这样我可以处理剪贴板。
我试过了
<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;
}
}
我的目标是从 Visual Studio 编辑器复制键盘和弦组合 Ctrl+E+ V 复制该行。 需要说明的是,这不是关于如何复制一行的问题,而是在 WPF 中处理键盘和弦场景的问题。
和弦如何完成
- CtrlV独立不会触发自定义行复制命令,只是不被处理 当 E 有 not 伴随它。
- 也就是回退到系统进行粘贴。
- 这不是交易破坏者,如果是这样我可以处理剪贴板。
我试过了
<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;
}
}