XamDataGrid では、FieldSettings の IsAutoEditModeEnabled および CellClickAction を設定し、PreviewKeyDown イベントで DataPresenterCommands を実行することで、セルのクリック即編集と Enter キーによる上下セル移動という Excel 風の操作を実現できます。
XamDataGrid の設定
FieldSettings に IsAutoEditModeEnabled="True" と CellClickAction="SelectCell" を指定します。あわせて、Enter キーの処理を行う PreviewKeyDown イベントハンドラを接続します。
<igWPF:XamDataGrid x:Name="xamDataGrid1" DataSource="{Binding}" PreviewKeyDown="xamDataGrid1_PreviewKeyDown">
<igWPF:XamDataGrid.FieldLayoutSettings>
<igWPF:FieldLayoutSettings AutoGenerateFields="False" />
</igWPF:XamDataGrid.FieldLayoutSettings>
<igWPF:XamDataGrid.FieldLayouts>
<igWPF:FieldLayout>
<igWPF:FieldLayout.FieldSettings>
<igWPF:FieldSettings IsAutoEditModeEnabled="True" CellClickAction="SelectCell"/>
</igWPF:FieldLayout.FieldSettings>
<igWPF:FieldLayout.Fields>
<igWPF:Field Name="Test1"/>
...
</igWPF:FieldLayout.Fields>
</igWPF:FieldLayout>
</igWPF:XamDataGrid.FieldLayouts>
</igWPF:XamDataGrid>
PreviewKeyDown イベントの処理
PreviewKeyDown ハンドラ内で Enter キーを検出します。Shift+Enter の場合は DataPresenterCommands.CellAbove を、Enter 単体の場合は DataPresenterCommands.CellBelow を ExecuteCommand で実行します。最後に e.Handled = true を設定して既定の動作を抑止します。
private void xamDataGrid1_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Enter)
{
if (e.KeyboardDevice.Modifiers == System.Windows.Input.ModifierKeys.Shift)
{
xamDataGrid1.ExecuteCommand(DataPresenterCommands.CellAbove);
}
else
{
xamDataGrid1.ExecuteCommand(DataPresenterCommands.CellBelow);
}
e.Handled = true;
}
}
実行結果
セルをクリックすると即座に編集モードへ移行します。Enter キーで下のセルへ、Shift+Enter キーで上のセルへフォーカスが移動します。
