0

我正在使用 WPFToolKitDataGrid来显示数据;在我的用例中

  1. 用户单击一个单元格并输入一个值(我捕获事件并将焦点设置为TextBox
  2. 按 Enter
  3. 承诺的价值
  4. 焦点转移到下一个单元格

现在,除非单击单元格,否则用户无法在TextBox(在)中输入任何值。可以是各种控件(如等)DataGridCell的一部分。TextBoxNumericUpDownCalendar

此行为类似于 Excel,但我无法将焦点转移到底层TextBox,因为其中有各种其他包装用户控件DataGridCell(类似于DataGridCellcontains MatrixCellContainer,其中 contains MatrixCell,其中包含UpDownControl)

任何指针都会非常有帮助。

更新:

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]);
          }
    }
    }
 }

但我知道会有更好的方法来实现这一点!

4

2 回答 2

2

你如何将焦点设置到下一个单元格?

WPF 有两个版本的焦点,逻辑焦点和键盘焦点。我怀疑你正在使用myDataGridCell.Focus(),它只设置逻辑焦点。

myDataGridCell.Focus();         // Sets Logical Focus
Keyboard.Focus(myDataGridCell); // Sets Keyboard Focus
于 2011-10-20T15:23:08.370 回答
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();
        }
    }
}

不过仍在寻找更好的方法...

于 2012-01-19T12:37:31.273 回答