コントロールは、キーボード操作の対象となる処理を WPF のコマンドとして提供します。コマンドに任意のキーボード ショートカットを関連付けることにより、コントロールのキーボード操作をカスタマイズできます。
コマンドの設定は、キーの既定の操作を上書きします。コマンドが関連付けられたキーの既定の操作は無効になります。つまり、[Enter] キーにセルの編集を開始するコマンドを関連付けた場合、既定操作であるアクティブ セルの次の行への移動は無効になります。コントロールに設定された既定の操作については「コマンド一覧」を参照してください。
コマンドとショートカットキーの関連付けは、コントロールの InputBindings プロパティに KeyBinding オブジェクトを設定します。
以下に、いくつかのショートカットキーとコマンドを関連付ける例を、XAMLコードとコードビハインドの両方のサンプルコードを使用して紹介します。
次のサンプルコードは、[Enter] キーでアクティブセルを右方向に移動します。
XAML |
コードのコピー |
---|---|
<sg:GcSpreadGrid Name="gcSpreadGrid1"> <sg:GcSpreadGrid.InputBindings> <KeyBinding Key="Enter" Command="{Binding Path=NavigationCommands.MoveRight, ElementName=gcSpreadGrid1}" /> </sg:GcSpreadGrid.InputBindings> </sg:GcSpreadGrid> |
C# |
コードのコピー |
---|---|
gcSpreadGrid1.InputBindings.Add(new KeyBinding(gcSpreadGrid1.NavigationCommands.MoveRight, new KeyGesture(Key.Enter))); |
Visual Basic |
コードのコピー |
---|---|
GcSpreadGrid1.InputBindings.Add(New KeyBinding(GcSpreadGrid1.NavigationCommands.MoveRight, New KeyGesture(Key.Enter))) |
次のサンプルコードは、[Ctrl] + [Shift] + [Enter] キーでセルの編集を開始します。
XAML |
コードのコピー |
---|---|
<sg:GcSpreadGrid Name="gcSpreadGrid1"> <sg:GcSpreadGrid.InputBindings> <KeyBinding Key="Enter" Modifiers="Ctrl+Shift" Command="{Binding Path=EditCommands.BeginEdit, ElementName=gcSpreadGrid1}" /> </sg:GcSpreadGrid.InputBindings> </sg:GcSpreadGrid> |
C# |
コードのコピー |
---|---|
gcSpreadGrid1.InputBindings.Add(new KeyBinding(gcSpreadGrid1.EditCommands.BeginEdit, new KeyGesture(Key.Enter, ModifierKeys.Control | ModifierKeys.Shift))); |
Visual Basic |
コードのコピー |
---|---|
GcSpreadGrid1.InputBindings.Add(New KeyBinding(GcSpreadGrid1.EditCommands.BeginEdit, New KeyGesture(Key.Enter, ModifierKeys.Control Or ModifierKeys.Shift))) |
次のサンプルコードは、[Tab] キーで次のセルへ移動し、最後のセルの場合は次のコントロールに移動します。
XAML |
コードのコピー |
---|---|
<sg:GcSpreadGrid Name="gcSpreadGrid1"> <sg:GcSpreadGrid.InputBindings> <KeyBinding Key="Tab" Command="{Binding Path=NavigationCommands.MoveNextThenControl, ElementName=gcSpreadGrid1}" /> </sg:GcSpreadGrid.InputBindings> </sg:GcSpreadGrid> |
C# |
コードのコピー |
---|---|
gcSpreadGrid1.InputBindings.Add(new KeyBinding(gcSpreadGrid1.NavigationCommands.MoveNextThenControl, new KeyGesture(Key.Tab))); |
Visual Basic |
コードのコピー |
---|---|
GcSpreadGrid1.InputBindings.Add(New KeyBinding(GcSpreadGrid1.NavigationCommands.MoveNextThenControl, New KeyGesture(Key.Tab))) |
既定でショートカットキーに関連付けられているコマンドを無効にするには、ショートカットキーに ApplicationCommands クラスの NotACommand を割り当てます。
次のサンプルコードは、既定の貼り付けコマンドが割り当てられている、[Ctrl] + [V] キーを無効にします。
XAML |
コードのコピー |
---|---|
<sg:GcSpreadGrid Name="gcSpreadGrid1"> <sg:GcSpreadGrid.InputBindings> <KeyBinding Key="V" Modifiers="Ctrl" Command="{Binding Path=ApplicationCommands.NotACommand, ElementName=gcSpreadGrid1}" /> </sg:GcSpreadGrid.InputBindings> </sg:GcSpreadGrid> |
C# |
コードのコピー |
---|---|
gcSpreadGrid1.InputBindings.Add(new InputBinding(ApplicationCommands.NotACommand, new KeyGesture(Key.V, ModifierKeys.Control))); |
Visual Basic |
コードのコピー |
---|---|
GcSpreadGrid1.InputBindings.Add(New InputBinding(ApplicationCommands.NotACommand, New KeyGesture(Key.V, ModifierKeys.Control))) |
コントロールの EditElementShowing イベントを使用すると、編集中のセルに対してショートカットキーと編集コマンドを関連付けることも可能です。
次のサンプルコードは、複数行入力が許可されている標準型セルに [Shift] + [Enter] および [Ctrl] + [Enter] キーで改行を入力します。
C# |
コードのコピー |
---|---|
void gcSpreadGrid1_EditElementShowing(object sender, GrapeCity.Windows.SpreadGrid.EditElementShowingEventArgs e) { if (e.EditElement is GrapeCity.Windows.SpreadGrid.Editors.GeneralEditElement) { e.EditElement.InputBindings.Add(new InputBinding(EditingCommands.EnterLineBreak, new KeyGesture(Key.Return, ModifierKeys.Control))); e.EditElement.InputBindings.Add(new InputBinding(EditingCommands.EnterLineBreak, new KeyGesture(Key.Return, ModifierKeys.Shift))); } } |
Visual Basic |
コードのコピー |
---|---|
Private Sub GcSpreadGrid1_EditElementShowing(sender As Object, e As GrapeCity.Windows.SpreadGrid.EditElementShowingEventArgs) Handles GcSpreadGrid1.EditElementShowing If TypeOf e.EditElement Is GrapeCity.Windows.SpreadGrid.Editors.GeneralEditElement Then e.EditElement.InputBindings.Add(New InputBinding(EditingCommands.EnterLineBreak, New KeyGesture(Key.Return, ModifierKeys.Control))) e.EditElement.InputBindings.Add(New InputBinding(EditingCommands.EnterLineBreak, New KeyGesture(Key.Return, ModifierKeys.Shift))) End If End Sub |