我正在使用WPFToolKit DataGrid
来显示数据;在我的用例中
TextBox
)现在,用户无法在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]);
}
}
}
}
但我知道会有更好的方法来实现这个目标!
答案 0 :(得分:2)
你如何将焦点设置到下一个单元格?
WPF有两个版本的焦点,逻辑焦点和键盘焦点。我怀疑你使用的是myDataGridCell.Focus()
,它只设置了Logical Focus。
myDataGridCell.Focus(); // Sets Logical Focus
Keyboard.Focus(myDataGridCell); // Sets Keyboard Focus
答案 1 :(得分:0)
最后我决定这个 -
private void HandleCellSelected(object sender, RoutedEventArgs e)
{
DataGridCell dataGridCell = sender as DataGridCell;
if (dataGridCell != null)
{
TextBox[] textboxcontrols = dataGridCell.GetChildrenOfType<TextBox>();
if (textboxcontrols.Count() != 0)
{
textboxcontrols[0].Focus();
}
}
}
仍在寻找更好的方法......