Rufen Sie die Endposition des Cursors in dem Text das Caret im nächsten TextBox zu setzen

StackOverflow https://stackoverflow.com/questions/3881940

  •  28-09-2019
  •  | 
  •  

Frage

Wie kann ich die Endposition des Caret in einer WPF-Textbox finden, damit ich mehr richtig mit dem caret bewegen kann leider nicht?

War es hilfreich?

Lösung

Wenn Sie die caretIndex Blick auf die folgenden Frage .

Allerdings, wenn Sie schauen, um die nächste TextBox unter bestimmten Bedingungen zu springen überprüfen Sie die folgende Probe aus. Hier verwende ich die TextBox Eigenschaft MaxLength und das KeyUp Ereignis zum nächsten TextBox zu springen, wenn man fertig ist.

Hier ist die XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <StackPanel
        Grid.Row="0">
        <TextBox Text="" MaxLength="3" KeyUp="TextBox_KeyUp" >
        </TextBox>
        <TextBox Text="" MaxLength="3" KeyUp="TextBox_KeyUp">
        </TextBox>
        <TextBox Text="" MaxLength="4" KeyUp="TextBox_KeyUp">
        </TextBox>
        </StackPanel>
</Grid>

Hier ist das KeyUp-Ereignis aus dem Code-behind:

private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
   TextBox tb = sender as TextBox;
   if (( tb != null ) && (tb.Text.Length >= tb.MaxLength))
   {
      int nextIndex = 0;
      var parent = VisualTreeHelper.GetParent(tb);
      int items = VisualTreeHelper.GetChildrenCount(parent);
      for( int index = 0; index < items; ++index )
      {
         TextBox child = VisualTreeHelper.GetChild(parent, index) as TextBox;
         if ((child != null) && ( child == tb ))
         {
            nextIndex = index + 1;
            if (nextIndex >= items) nextIndex = 0;
            break;
         }
      }

      TextBox nextControl = VisualTreeHelper.GetChild(parent, nextIndex) as TextBox;
      if (nextControl != null)
      {
         nextControl.Focus();
      }
   }
}

Bearbeiten
Nach dem Lesen der folgenden Antwort ich die TextBox_KeyUp wie folgt geändert:

  private void TextBox_KeyUp(object sender, KeyEventArgs e)
  {
     Action<FocusNavigationDirection> moveFocus = focusDirection =>
     {
        e.Handled = true;
        var request = new TraversalRequest(focusDirection);
        var focusedElement = Keyboard.FocusedElement as UIElement;
        if (focusedElement != null)
           focusedElement.MoveFocus(request);
     };

     TextBox tb = sender as TextBox;
     if ((tb != null) && (tb.Text.Length >= tb.MaxLength))
     {
        moveFocus(FocusNavigationDirection.Next);
     }
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top