Я использую WPFToolKit DataGrid
для отображения данных;В моем случае
- пользователь нажимает на ячейку и вводит значение (я перехватываю событие и устанавливаю фокус на
TextBox
) - . Нажмите Enter
- Фокус смещается на следующую ячейку
Теперь пользователь не может ввести любое значение в TextBox
(в DataGridCell
), если он не нажмет наклетка.TextBox
может быть частью различных элементов управления (например, NumericUpDown
, Calendar
и т. Д.).
Это поведение аналогично Excel, но я не могу переместить фокус на базовый TextBox
поскольку в DataGridCell
есть различные другие пользовательские элементы управления оболочки (что-то вроде DataGridCell
содержит MatrixCellContainer
, который содержит MatrixCell
, который содержит UpDown
элемент управления)
Любой указатель будет действительно полезен.
Обновление:
Я могу достичь того, что ищу, обработав событие DataGridCell_Selected
, например:
private void DataGridCell_Selected(object sender, RoutedEventArgs e)
{
Microsoft.Windows.Controls.DataGridCell dataGridCell =
sender as Microsoft.Windows.Controls.DataGridCell;
// ToDo: This is a very bad hack;
// should be replaced by some proper technique
if (dataGridCell != null)
{
NumericUpDownBase<int>[] IntUpDownControls =
dataGridCell.GetChildrenOfType<NumericUpDownBase<int>>();
if (IntUpDownControls.Count() != 0)
{
IntUpDownControls[0].Focus();
//Keyboard.Focus(IntUpDownControls[0]);
}
else
{
NumericUpDownBase<double>[] DblUpDownControls =
dataGridCell.GetChildrenOfType<NumericUpDownBase<Double>>();
if (DblUpDownControls.Count() != 0)
{
DblUpDownControls[0].Focus();
//Keyboard.Focus(DblUpDownControls[0]);
}
}
}
}
Но я знаю, что будет лучший способчтобы достичь этого!