我创建了一些文本框,希望用户在其中输入十进制值。在我使用过的所有应用程序中,当我在文本框中输入内容并按下回车键后,将接受该值并且文本框失去焦点。如何在我的应用程序中实现这个功能? 我知道可以使用键事件相对容易地实现它,但也许有命令或其他方法。 我在stackoverflow上搜索,但我只找到了关于如何在按下回车键后保持焦点的问题...
我创建了一些文本框,希望用户在其中输入十进制值。在我使用过的所有应用程序中,当我在文本框中输入内容并按下回车键后,将接受该值并且文本框失去焦点。如何在我的应用程序中实现这个功能? 我知道可以使用键事件相对容易地实现它,但也许有命令或其他方法。 我在stackoverflow上搜索,但我只找到了关于如何在按下回车键后保持焦点的问题...
你还可以创建一个通用的行为,可以轻松地应用于应用程序中的任何文本框。以下是示例行为类:
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 中使用此类,请将它包含在文本框行为集合中,就像这样:
要在您的 XAML中使用此类,请像以下示例一样将其包括在文本框行为集合中:
-
<TextBox>
<i:Interaction.Behaviors>
<TextBoxEnterKeyUpdateBehavior />
</i:Interaction.Behaviors>
</TextBox>
这里的“i”指的是System.Windows.Interactivity命名空间。
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
。 - cod3monk3y