【问题标题】:How to avoid lost focus of TextBox when click a button in wpf?单击wpf中的按钮时如何避免TextBox失去焦点?
【发布时间】:2015-09-30 06:17:04
【问题描述】:

现在光标聚焦在文本框中。如果我点击按钮 (RemoveLostFocus),TextBox 的 Lost focus 事件会被触发。但我需要的是,TextBox 的 Lost Focus 事件不应该触发。有什么办法吗?

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        txtUserName.Focus();
    }

private void UserName_LostFocus(object sender, RoutedEventArgs e)
    {
        if (txtUserName.Text.Length < 1)
        {
            MessageBox.Show("UserName should not be empty");
        }
    }

    private void btnCancel_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
                    anotherWindow.Show();
    }

【问题讨论】:

  • 我已经尝试了一些验证,它会提示为消息窗口。如果我单击称为取消的按钮。该验证部分正在执行。
  • 什么时候可以Text.Length &lt; 0
  • 当我关注另一个此处未提及的文本框时
  • AFAIK Text.Length 永远不能小于 0。
  • 对不起,是Text.Length

标签: wpf textbox


【解决方案1】:

Button 焦点发生变化时,您将希望使用FocusManager 附加属性将焦点应用于TextBox

例子:

<StackPanel>
    <TextBox Name="txtbx" />
    <Button Content="Click Me!" FocusManager.FocusedElement="{Binding ElementName=txtbx}"/>
</StackPanel>

使用此解决方案,TextBox 将始终保持焦点,即使按下 Button 并且不会触发 TextBox LostFocus 事件

【讨论】:

  • +1(在容器上)+ FocusManager.IsFocusScope - 唯一有效的解决方案
  • 我的下一个问题,如果您想做与此完全相同的事情(使用 TextBox 和 Button),但 Textbox 位于自定义控件上,而按钮位于包含那个自定义控件?
【解决方案2】:

您可以在按钮上设置 Focusable="False"。这是答案的链接enter link description here

【讨论】:

    【解决方案3】:

    设置Focusable Property

    <Button Focusable="False" />
    

    【讨论】:

    • 我使用了你的代码,尽管 Lostfocus 被解雇了。我将编辑我的真实场景。
    • 在您的按钮处理程序中使用this.Close(),您将引发LostFocus 事件。你想关闭什么?
    • 导航到另一个窗口。
    • 但是如果你离开窗口TextBox也会失去焦点。这是你无法避免的。
    • 如果我使用 this.Hide() 而不是 this.Close()。这是工作。当我只有一个窗口时,这次我使用此代码(this.Hide())意味着,应用程序正在运行而不是结束。这是正确的方法吗?
    【解决方案4】:

    在你的按钮的点击事件中,你可以做类似的事情

    this.textBox.Focus();
    

    如果你的 lostfocus 方法如下所示:

    private void UserName_LostFocus(object sender, RoutedEventArgs e){ ... }
    

    您可以使用以下代码防止丢失焦点:

    this.textBox.LostFocus -= UserName_LostFocus;
    

    【讨论】:

    • 请看我编辑的代码。当我单击取消按钮时,TextBox 的失去焦点事件被触发并且失去焦点事件中的逻辑正在执行。但我不希望这样。
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多