DataGrid
データを表示するためにWPFToolKit を使用しています。私のユースケースでは
- ユーザーがセルをクリックして値を入力します (イベントをトラップし、フォーカスを に設定します
TextBox
) - Enter キーを押します
- 値がコミットされます
- フォーカスが次のセルに移動
これで、セルをクリックしない限り、ユーザーは に値を入力できなくなりTextBox
ました。DataGridCell
は、TextBox
さまざまなコントロール (など) の一部にすることができます。NumericUpDown
Calendar
TextBox
この動作は Excel に似ていますが、他のさまざまなラッパー ユーザー コントロールが含まれているため、基になるものにフォーカスを移すことができませんDataGridCell
( DataGridCell
contains MatrixCellContainer
、contains MatrixCell
、contains UpDown
Control など) 。
どんなポインタでも本当に役に立ちます。
アップデート:
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]);
}
}
}
}
しかし、これを達成するためのより良い方法があることを私は知っています!