我有RoutedUICommand
名为Comment Selection
。我需要为这个命令添加一个输入手势,就像它在VIsual Studio中一样,即。 ( Ctrl + K , Ctrl + C )。
我怎样才能做到这一点? Plz帮助我。 (记住VS功能)。
问候,贾瓦哈尔
答案 0 :(得分:3)
此代码适用于“Ctrl + W,Ctrl + E”和/或“Ctrl + W,E”组合,但您可以对任何组合键进行参数化:
XAML:
<MenuItem Header="Header" InputGestureText="Ctrl+W, E" Command="ShowCommand"/>
C#:
public static readonly RoutedUICommand ShowCommand = new RoutedUICommand(
"Show command text",
"Show command desc",
typeof(ThisWindow),
new InputGestureCollection(new[] { new ShowCommandGesture (Key.E) }));
public class ShowCommandGesture : InputGesture
{
private readonly Key _key;
private bool _gotFirstGesture;
private readonly InputGesture _ctrlWGesture = new KeyGesture(Key.W, ModifierKeys.Control);
public ShowCommandGesture(Key key)
{
_key = key;
}
public override bool Matches(object obj, InputEventArgs inputEventArgs)
{
KeyEventArgs keyArgs = inputEventArgs as KeyEventArgs;
if (keyArgs == null || keyArgs.IsRepeat)
return false;
if (_gotFirstGesture)
{
_gotFirstGesture = false;
if (keyArgs.Key == _key)
{
inputEventArgs.Handled = true;
}
return keyArgs.Key == _key;
}
else
{
_gotFirstGesture = _ctrlWGesture.Matches(null, inputEventArgs);
if (_gotFirstGesture)
{
inputEventArgs.Handled = true;
}
return false;
}
}
}
答案 1 :(得分:2)
我发现这篇博文我认为可以提供帮助
http://kent-boogaart.com/blog/multikeygesture
基本上,WPF没有内置的支持,但是继承InputGesture或KeyGesture似乎是一种可能的方法来实现这一点而不会有太多的麻烦。
答案 2 :(得分:1)
这是我如何拼凑实际有效的东西。我只是希望能够为那些为我的启蒙之路铺平道路的人提供信誉。
假设您的应用程序名为 Heckler 。将应用程序的命名空间标记添加到Window
对象:
<Window ...
xmlns:w="clr-namespace:Heckler"
...>
现在添加CommandBindings
属性标记并启动CommandBinding
个对象的集合。在这里,我们添加自定义命令评论选择:
<Window.CommandBindings>
<CommandBinding
Command="w:CustomCommands.CommentSelection"
CanExecute="CommentSelectionCanExecute"
Executed="CommentSelectionExecuted" />
</Window.CommandBindings>
将MenuItem
添加到主Menu
的{{1}}:
MenuItem
在 <Menu
IsMainMenu="True">
<MenuItem
Header="_File">
<MenuItem
Command="w:CustomCommands.CommentSelection">
</MenuItem>
</MenuItem>
</Menu>
...
</Window>
代码隐藏中,添加 CustomCommands 类和自定义命令:
Window
现在连接您的事件处理程序:
public static class CustomCommands
{
// Ctrl+Shift+C to avoid collision with Ctrl+C.
public static readonly RoutedUICommand CommentSelection =
new RoutedUICommand("_Comment Selection",
"CommentSelection", typeof(MainWindow),
new InputGestureCollection()
{ new KeyGesture(Key.C, (ModifierKeys.Control | ModifierKeys.Shift)) });
}
你应该好好去。我希望这有帮助,我没有错过任何东西!
答案 3 :(得分:-1)
<KeyBinding Command="{Binding ExitCommand}"
Key="{Binding ExitCommand.GestureKey}"
Modifiers="{Binding ExitCommand.GestureModifier}"/>
get
{
if (exitCommand == null)
{
exitCommand = new DelegateCommand(Exit);
exitCommand.GestureKey = Key.X;
exitCommand.GestureModifier = ModifierKeys.Control;
exitCommand.MouseGesture = MouseAction.LeftDoubleClick;
}
return exitCommand;
}
}
private void Exit()
{
Application.Current.Shutdown();
}