WPF如何在输入后使文本框失去焦点

Des*_*ess 10 c# wpf textbox focus

我创建了一些文本框,我希望用户在其中输入十进制值.在我曾经使用的每个应用程序中,当我在文本框中键入内容并按Enter键时,该值被接受并且文本框失去焦点.我怎么能在我的应用程序中执行此操作?我知道用一个关键事件做它应该相对容易,但也许有一个命令或什么的.我搜索了stackoverflow,但我发现有关如何在输入后保持焦点的问题...

Pre*_*cog 24

您还可以创建一个通用行为,可以轻松应用于应用程序中的任何文本框.这是一个示例行为类: -

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));
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要在xaml中使用此类,只需将其包含在文本框行为集合中,如下所示: -

<TextBox>
    <i:Interaction.Behaviors>
           <TextBoxEnterKeyUpdateBehavior />
    </i:Interaction.Behaviors>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

这里"i"指的是System.Windows.Interactivity命名空间.

  • 老实说,我对此类建议获得的大量分数表示怀疑,因为它们更“XAML-y”。另一个答案是一个小函数和每个键的一行。每个盒子都需要大量的 &lt;i:/&gt; xaml 垃圾邮件,或者至少需要一个额外的不同解决方案来避免这种情况。 (2认同)