private void dg_PreviewKeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.Key == Key.Enter)
{
e.Handled = true;
var cell = GetCell(dgIssuance, dgIssuance.Items.Count - 1, 2);
if (cell != null)
{
cell.IsSelected = true;
cell.Focus();
dg.BeginEdit();
}
}
}
catch (Exception ex)
{
MessageBox(ex.Message, "Error", MessageType.Error);
}
}
public static DataGridCell GetCell(DataGrid dg, int row, int column)
{
var rowContainer = GetRow(dg, row);
if (rowContainer != null)
{
var presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
if (presenter != null)
{
// try to get the cell but it may possibly be virtualized
var cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
if (cell == null)
{
// now try to bring into view and retreive the cell
dg.ScrollIntoView(rowContainer, dg.Columns[column]);
cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
}
return cell;
}
}
return null;
}
我在幾個項目中做了類似的事情,代碼非常非常相似。我只是擴展了數據網格並封裝了大量你正在做的事情。所以我可以保證這個/你的答案絕對有效! +1 –
這將是很高興看到缺少的代碼:'GetRow()','GetVisualChild()'什麼是'dgIssuance'? –
bitbonk
爲什麼要將硬編碼值傳遞給GetCell函數?問題是當按下Enter鍵時移動到** next **單元格,但是您想要在Enter單擊的第2列中獲取最後一個單元格。爲什麼? – AndreyS