wpf datagridcell 聚焦时进入 editmodus

wpf datagridcell go in editmodus when focussed

我有一个简单的 DataGrid,它有 1 个可编辑列和 1 个只读列。

当我在 editmodus 中按 TAB 或 ENTER 时,下一个单元格将获得焦点。 但是下一个单元格不会自动进入 editmodus.

<DataGrid Name="DataGridMain" AutoGenerateColumns="False" SelectionUnit="Cell" SelectionMode="Single">
    <DataGrid.Columns>

        <DataGridTemplateColumn Header="Code">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Code}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellStyle>
                <Style TargetType="DataGridCell">
                    <Setter Property="IsTabStop" Value="False"/>
                </Style>
            </DataGridTemplateColumn.CellStyle>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Description">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Description}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Description}" Background="LightGray"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>
</DataGrid>

聚焦细胞时进入 editmodus 的最简单方法是什么?

我最终简单地订阅了数据网格的 SelectedCellsChanged 事件,并调用了 BeginEdit()。

<DataGrid Name="DataGridMain" SelectedCellsChanged="GridMainElements_SelectedCellsChanged" AutoGenerateColumns="False" SelectionUnit="Cell" SelectionMode="Single" >
    ...
</DataGrid>

以及事件:

private void GridMainElements_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
        Debug.WriteLine("Selected cells changed");

        if(e != null && e.AddedCells != null && e.AddedCells.Count == 1)
        {
            DataGridCellInfo selectedCell = e.AddedCells[0];

            if(selectedCell.Column == ColumnFormula || selectedCell.Column == ColumnNote)
            {
                GridMainElements.BeginEdit();
            }
        }
    }