Frage

Ich benutze wpftoolkit DataGrid Daten anzuzeigen; In meinem Anwendungsfall

  1. Der Benutzer klickt auf eine Zelle und betritt einen Wert (fangen Sie das Ereignis ein und setzen Sie den Fokus auf die TextBox)
  2. Pressen eingeben
  3. Wert wird begangen
  4. Fokus verschiebt sich auf die nächste Zelle

Jetzt kann der Benutzer keinen Wert in die eingeben TextBox(in dem DataGridCell) Es sei denn, er klickt auf die Zelle. Das TextBox kann Teil verschiedener Kontrollen sein (wie NumericUpDown, Calendar etc.).

Dieses Verhalten ähnelt Excel, aber ich kann den Fokus nicht auf die zugrunde liegenden verschieben TextBox Da sind verschiedene andere Wrapper -Benutzersteuerungen in der vorhanden DataGridCell(etwas wie DataGridCell enthält MatrixCellContainer, was beinhaltet MatrixCell, was beinhaltet UpDown Kontrolle)

Jeder Zeiger wird sehr hilfreich sein.

Aktualisieren:

Ich kann das erreichen, wonach ich suche DataGridCell_Selected Ereignis wie folgt:

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

Aber ich weiß, dass es einen besseren Weg geben wird, dies zu erreichen!

War es hilfreich?

Lösung 2

Schließlich habe ich mich damit entschieden -

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

Ich suche immer noch nach einem besseren Ansatz ...

Andere Tipps

Wie setzen Sie sich auf die nächste Zelle konzentrieren?

WPF verfügt über zwei Versionen von Fokus, logischer Fokus und Tastaturfokus. Ich vermute, Sie verwenden myDataGridCell.Focus(), was nur logischen Fokus legt.

myDataGridCell.Focus();         // Sets Logical Focus
Keyboard.Focus(myDataGridCell); // Sets Keyboard Focus
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top