Pregunta

Estoy usando wpftoolkit DataGrid para mostrar datos; En mi caso de uso

  1. El usuario hace clic en una celda y entra en un valor (atrajo el evento y establezco el enfoque en el TextBox)
  2. Presiones enter
  3. El valor se comete
  4. El enfoque cambia a la siguiente celda

Ahora, el usuario no puede ingresar ningún valor en el TextBox(en el DataGridCell) a menos que haga clic en la celda. los TextBox puede ser parte de varios controles (como NumericUpDown, Calendar etc.).

Este comportamiento es similar a Excel, pero no puedo cambiar el enfoque a los subyacentes TextBox Como varios otros controles de usuario de envoltura están ahí en el DataGridCell(algo como DataGridCell contiene MatrixCellContainer, que contiene MatrixCell, que contiene UpDown Control)

Cualquier puntero será realmente útil.

Actualizar:

Puedo lograr lo que estoy buscando al manejar DataGridCell_Selected evento como este:

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

¡Pero sé que habrá una mejor manera de lograr esto!

¿Fue útil?

Solución 2

Finalmente me establecí con esto -

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

Sin embargo, todavía busco un mejor enfoque ...

Otros consejos

¿Cómo está configurando el enfoque en la siguiente celda?

WPF tiene dos versiones de enfoque, enfoque lógico y enfoque de teclado. Sospecho que estás usando myDataGridCell.Focus(), que solo establece un enfoque lógico.

myDataGridCell.Focus();         // Sets Logical Focus
Keyboard.Focus(myDataGridCell); // Sets Keyboard Focus
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top