XamDataGrid では、FieldSettingsIsAutoEditModeEnabled および CellClickAction を設定し、PreviewKeyDown イベントで DataPresenterCommands を実行することで、セルのクリック即編集と Enter キーによる上下セル移動という Excel 風の操作を実現できます。

XamDataGrid の設定

FieldSettingsIsAutoEditModeEnabled="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.CellBelowExecuteCommand で実行します。最後に 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 キーで上のセルへフォーカスが移動します。

Tagged:

製品について

Ultimate UI for WPF