Wpf 达到MaxLength时XAML触发自动选项卡

Wpf 达到MaxLength时XAML触发自动选项卡,wpf,xaml,datatrigger,maxlength,Wpf,Xaml,Datatrigger,Maxlength,当MaxLength属性进入XAML触发器、DataTrigger、PropertyTrigger、Style.Trigger等时,如何合并一个自动选项卡。下面是两个这样的选项,说明了我是如何通过代码隐藏通过文本框实现这一点的。我也希望在XAML样式中应用它。谢谢 XAML: <TextBox x:Name="MyTextBox" Text="{Binding Path=MyProperty}" Style="{StaticResource

当MaxLength属性进入XAML触发器、DataTrigger、PropertyTrigger、Style.Trigger等时,如何合并一个自动选项卡。下面是两个这样的选项,说明了我是如何通过代码隐藏通过文本框实现这一点的。我也希望在XAML样式中应用它。谢谢

XAML:

<TextBox x:Name="MyTextBox"
            Text="{Binding Path=MyProperty}"
            Style="{StaticResource TextBoxStyle}"
            MaxLength="5"
            TextChanged="MyTextBox_TextChanged">
</TextBox>
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));
        }
    }
}

只需在Shell.xaml中执行此操作

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

可以将触发器添加到控件模板中进行长度比较,但无法在xaml中移动焦点。使用代码隐藏没有什么错。我可以使用代码隐藏,但我想将其应用于多个视图,并认为最好在样式中使用某种触发器。你能给我举一个你会使用的控制模板的例子吗?可能是app.xaml和app.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));
        }
    }
}