とRoutedUICommand
呼ばれるものがありComment Selection
ます。VIsual Studio と同じように、このコマンドに入力ジェスチャを追加する必要があります。( Ctrl+K、Ctrl+C)。これどうやってするの?助けてください。(VS 機能を念頭に置いてください)。
よろしく、ジャワハル
とRoutedUICommand
呼ばれるものがありComment Selection
ます。VIsual Studio と同じように、このコマンドに入力ジェスチャを追加する必要があります。( Ctrl+K、Ctrl+C)。これどうやってするの?助けてください。(VS 機能を念頭に置いてください)。
よろしく、ジャワハル
このコードは、「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;
}
}
}
役立つと思われるこのブログ投稿を見つけました
http://kent-boogaart.com/blog/multikeygesture
基本的に、WPF にはそれに対するサポートが組み込まれていませんが、InputGesture または KeyGesture をサブクラス化することは、あまり手間をかけずにこれを実現できる方法のようです。
これが、実際に機能するものをどのようにまとめたかです。私の啓蒙の道への道を開いた人たちの功績を称えたいと思います。
あなたのアプリケーションがHecklerと呼ばれているとしましょう。アプリケーションの名前空間タグをWindow
オブジェクトに追加します。
<Window ...
xmlns:w="clr-namespace:Heckler"
...>
CommandBindings
プロパティ タグを追加して、CommandBinding
オブジェクトのコレクションを開始します。ここで、カスタム コマンドComment Selectionを追加します。
<Window.CommandBindings>
<CommandBinding
Command="w:CustomCommands.CommentSelection"
CanExecute="CommentSelectionCanExecute"
Executed="CommentSelectionExecuted" />
</Window.CommandBindings>
MenuItem
aを mainMenu
のに追加MenuItem
:
<Menu
IsMainMenu="True">
<MenuItem
Header="_File">
<MenuItem
Command="w:CustomCommands.CommentSelection">
</MenuItem>
</MenuItem>
</Menu>
...
</Window>
Window
コード ビハインドで、CustomCommands クラスとカスタム コマンドを追加します。
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)) });
}
次に、イベント ハンドラーを接続します。
private void CommentSelectionCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
// Determines status of command.
e.CanExecute = true;
}
private void CommentSelectionExecuted(object sender, ExecutedRoutedEventArgs e)
{
// TO-DO: Insert magic here.
}
準備万端です。これがお役に立てば幸いです。何も見逃していません。
<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();
}