2010-12-02 2 views
2

Как включить автоматическую вкладку, когда свойство MaxLength будет достигнуто в XAML Trigger, DataTrigger, PropertyTrigger, Style.Trigger и т. Д. Ниже приведены два таких параметра, как у меня есть уже выполнил это с помощью TextBox с помощью кода. Я также хочу применить его в стиле XAML. Благодарю.XAML Trigger Auto-tab при достижении MaxLength

XAML:

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

Code-Behind для 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

Вы можете добавить триггер в шаблон управления для сравнения длины, но невозможно перемещать фокус в xaml. Нет ничего плохого в использовании кода. – vorrtex 2010-12-02 22:53:34

+0

Я был бы в порядке, используя код, но я хочу применить его к нескольким представлениям и подумал, что лучше использовать какой-то триггер в стилях. Можете ли вы показать мне пример шаблона управления, который вы бы использовали? – woodyiii 2010-12-03 16:11:04

ответ

0

просто сделать это в Shell.xaml

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

и в вашей оболочке. 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)); 
     } 
    } 
}