WPF как сделать textbox потерять фокус после нажатия enter
Я создал несколько текстовых полей, и я хочу, чтобы пользователь вводил в них десятичные значения. В каждом приложении, которое я когда-либо использовал, когда я набираю что-то в текстовое поле и нажимаю enter, значение принимается, и textbox теряет фокус. Как я могу сделать это в своем приложении? Я знаю, что это должно быть относительно легко сделать с ключевым событием, но, возможно, есть команда или что-то еще. Я искал stackoverflow, но я нашел только вопросы о том, как сохранить фокус после нажатия enter...
1 ответов
вы также можете создать общее поведение, которое можно легко применить к любому текстовому окну в вашем приложении. Вот пример поведения класса: -
public class TextBoxEnterKeyUpdateBehavior : Behavior<TextBox>
{
protected override void OnAttached()
{
if (this.AssociatedObject != null)
{
base.OnAttached();
this.AssociatedObject.KeyDown += AssociatedObject_KeyDown;
}
}
protected override void OnDetaching()
{
if (this.AssociatedObject != null)
{
this.AssociatedObject.KeyDown -= AssociatedObject_KeyDown;
base.OnDetaching();
}
}
private void AssociatedObject_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null)
{
if (e.Key == Key.Return)
{
if (e.Key == Key.Enter)
{
textBox.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
}
}
}
чтобы использовать этот класс в xaml, просто включите его в коллекцию поведения textbox следующим образом: -
<TextBox>
<i:Interaction.Behaviors>
<TextBoxEnterKeyUpdateBehavior />
</i:Interaction.Behaviors>
</TextBox>
здесь " i " относится к системе.Окна.Пространство имен интерактивности.