WPF数据网格如何在移动到下一行时进入单元格的编辑模式



我正在尝试创建一个数据网格,一旦编辑了单元格,按下Enter键,光标就会移动到下一行的同一列,并立即进入编辑模式。

我需要这个问题中的确切行为:Wpf数据网格输入键移动下一行

然而,给定的解决方案不起作用,我必须再次按下回车键才能进入编辑模式。要编辑的单元格在名为"的列中;MeasuredResult";

xaml:

<DataGrid.Columns>
<DataGridTemplateColumn Header="Aliquot ID" Width="Auto" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding AliquotId}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn x:Name="MeasuredResult" Header="MeasuredResult" Width="Auto" >                       
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding MeasuredResult, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="{Binding IsReadOnlyMeasuredResult}" 
BorderThickness="0" VerticalContentAlignment="Center" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Right"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Unit" Width="Auto" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Unit}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

代码背后:

private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
System.Diagnostics.Debug.WriteLine("key down handler entered, key pressed = " + e.Key);
if ((e.Key == Key.Enter) || (e.Key == Key.Return))
{
DataGrid grid = sender as DataGrid;

var focusedElement = Keyboard.FocusedElement as UIElement;
focusedElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
grid.SelectedItem = grid.CurrentItem;

grid.CurrentCell = new DataGridCellInfo(grid.CurrentItem, grid.Columns[4]);

grid.BeginEdit();                
e.Handled = true;                
}
}

我试着先使用将焦点设置在特定的单元格上

grid.CurrentCell = new DataGridCellInfo(grid.CurrentItem, grid.Columns[4]);
DataGridCell cell = (DataGridCell)grid.CurrentCell.Column.GetCellContent(grid.CurrentCell.Item).Parent;
cell.Focus();

从而完全停止进入编辑模式。我尝试将数据网格中的SelectedUnit更改为Cell,但仍然会发生同样的基本行为。非常感谢您的帮助。

我发现,如果将列从DataGridTemplateColumn更改为到DataGridTextColumn,即:

<DataGridTextColumn x:Name="MeasuredResult" Binding="{Binding MeasuredResult, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="MeasuredResult" />

然后我得到了我想要的行为。

最新更新