Когда DataGrid ниже получает фокус в первый раз и только в первый раз (т. Е. После того, как какой-то другой элемент управления имел фокус), последняя строка, второй столбец должна быть сфокусирована и отредактирована.DataGrid автоматически выбирает последнюю ячейку
Я добавил обработчик для DataGrid.GotFocus, но это сложный код и не получить результат выше.
У каждого есть элегантное, пуленепробиваемое решение?
Приветствия,
Berryl
редактирует
Я сделал крошечные изменения в коде
- отправитель должен всегда быть в сетке, я хочу, так что я просто использовал, что вместо того, чтобы полагаться на a name
Когда SelectionUnit является FullRow, поскольку моя сетка была до того, как я сменил ее на CellOrRowHeader, вы: ap димому не может вызвать SelectedCells.Clear()
частная пустота OnDataGridKeyboardGotFocus (объект отправителя, KeyboardFocusChangedEventArgs е) {
var dg = sender as DataGrid; if (_hasHadInitialFocus) return; var rowIndex = dg.Items.Count - 2; if (rowIndex >= 0 && dg.Columns.Count - 1 >= 0) { var column = dg.Columns[dg.Columns.Count - 1]; var item = dg.Items[rowIndex]; var dataGridCellInfo = new DataGridCellInfo(item, column); if (dg.SelectionUnit != DataGridSelectionUnit.FullRow) { dg.SelectedCells.Clear(); dg.SelectedCells.Add(dataGridCellInfo); } else { var row = dg.GetRow(rowIndex); row.IsSelected = true; } dg.CurrentCell = dataGridCellInfo; dg.BeginEdit(); } _hasHadInitialFocus = true;
}
Новый Вопрос
Я хочу повторите выбор, когда фокус переходит в другое управление в окне, а затем обратно в сетку. Я думал, что могу поменять эту защелку _hasInitialFocus на false в событии LostFocus, но приведенный ниже код активирует изменения ячейки. Знаете ли вы, как я лучше поймаю на место потерянное фокусное мероприятие, и согласны ли вы с тем, что это место, чтобы выключить фиксатор?
private void DataGridLostFocus(object sender, RoutedEventArgs e) {
_hasHadInitialFocus = false;
}
Другой новый вопрос!
Я нахожу DataGrid в качестве PITA и короткую полезную информацию. Лучшие ссылки (Vin Sibal, Jamie Rodriquez) все очень старые (когда они были частью ToolKit).
Знаете ли вы, что обновленная ссылка действительно хороша?
Вы могли бы, возможно, взглянуть на e.NewFocus, e.OldFocus, e.OriginalSource в DataGridLostFocus и сделать что-то умное с ними. Я боюсь, что мой источник информации о DataGrid, вероятно, такой же, как ваш. MSDN, StackOverflow и много экспериментов. – Phil