2010-12-02 48 views
2

Comment puis-je incorporer un onglet automatique lorsque la propriété MaxLength est atteinte dans un déclencheur XAML, DataTrigger, PropertyTrigger, Style.Trigger, etc. Voici deux de ces options pour savoir comment déjà accompli ceci avec un TextBox via code-behind. Je cherche à l'appliquer dans un style XAML. Merci.Onglet Auto déclencheur XAML lorsque MaxLength est atteint

XAML:

<TextBox x:Name="MyTextBox" 
      Text="{Binding Path=MyProperty}" 
      Style="{StaticResource TextBoxStyle}" 
      MaxLength="5" 
      TextChanged="MyTextBox_TextChanged"> 
</TextBox> 

code-behind pour WPF:

private void MyTextBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    if (MyTextBox.Text.Length == MyTextBox.MaxLength) 
    { 
     Keyboard.Focus(NextTextBox); 
    } 
} 

private void MyTextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    // Auto-tab when maxlength is reached 
     if (((TextBox)sender).MaxLength == ((TextBox)sender).Text.Length) 
     { 
      // move focus 
      var ue = e.OriginalSource as FrameworkElement; 
      e.Handled = true; 
      ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
     } 
    } 
} 
+0

Vous pouvez ajouter un déclencheur dans un modèle de contrôle pour une comparaison de longueur, mais il est impossible de déplacer un focus dans un xaml. Il n'y a rien de mal à utiliser le code-behind. – vorrtex

+0

Je serais bien d'utiliser le code-behind, mais je veux l'appliquer à plusieurs vues et je pense qu'il vaut mieux utiliser une sorte de Trigger dans les styles. Pouvez-vous me montrer un exemple du modèle de contrôle que vous utiliseriez? – woodyiii

Répondre

0

faire simplement dans votre Shell.xaml

<Style TargetType="TextBox"> 
       <EventSetter Event="TextChanged" Handler="MyTextBox_PreviewKeyDown"/> 
      </Style> 

et dans votre coquille. xaml.cs

private void MyTextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    // Auto-tab when maxlength is reached 
     if (((TextBox)sender).MaxLength == ((TextBox)sender).Text.Length) 
     { 
      // move focus 
      var ue = e.OriginalSource as FrameworkElement; 
      e.Handled = true; 
      ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
     } 
    } 
} 
+0

Peut être app.xaml et app.xaml.cs – WPFKK