如何避免在wpf中单击按钮时文本框失去焦点?

如何避免在wpf中单击按钮时文本框失去焦点?,wpf,textbox,Wpf,Textbox,现在光标在文本框中聚焦。如果我单击按钮(RemoveLostFocus),文本框的失去焦点事件将被触发。但我需要的是,文本框的失焦事件不应该触发。有什么办法吗 private void Window_Loaded(object sender, RoutedEventArgs e) { txtUserName.Focus(); } private void UserName_LostFocus(object sender, RoutedEventArgs e)

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

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();
    }
private void Window\u已加载(对象发送方,路由目标)
{
txtUserName.Focus();
}
私有无效用户名\u LostFocus(对象发送方,RoutedEventArgs e)
{
if(txtUserName.Text.Length<1)
{
MessageBox.Show(“用户名不应为空”);
}
}
私有void btnCancel\u单击(对象发送者、路由目标)
{
这个。关闭();
另一个窗口。Show();
}
设置


在点击事件按钮中,您可以执行以下操作

this.textBox.Focus();
如果lostfocus方法如下所示:

private void UserName_LostFocus(object sender, RoutedEventArgs e){ ... }
您可以使用以下代码防止lostfocus:

this.textBox.LostFocus -= UserName_LostFocus;

按钮更改焦点时,您需要使用
焦点管理器
附加属性将焦点应用于
文本框

例如:

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


使用此解决方案,
文本框
将始终聚焦,即使按下
按钮
,也不会触发
文本框
丢失焦点事件

您可以在按钮上设置Focusable=“False”。这里是答案的链接

我尝试了一些验证,它将作为消息窗口提示。如果我点击了被称为“取消”的按钮。该验证部分正在执行。何时可以执行此操作?
Text.Length<0
?当我聚焦到此处未提及的另一个文本框时,AIK
Text.Length
永远不能小于0。抱歉,这是文本。Length<1我使用了您的代码,尽管Lostfocus已触发。我将编辑我的真实场景。使用按钮处理程序中的
this.Close()
可以引发
LostFocus
事件。你想关闭什么?导航到另一个窗口。但是如果你离开窗口,文本框也会失去焦点。你无法避免这个。如果我使用这个.Hide()而不是这个.Close()。它正在工作。当我只有一个窗口时,这一次我使用这个代码(this.Hide())意味着应用程序正在运行而不是结束。这是正确的方法吗?请看我编辑的代码。当我点击cancel button时,TextBox的失焦事件被触发,失焦事件中的逻辑正在执行。但我不希望如此。+1(在容器上)+
FocusManager.IsFocusScope
-唯一有效的解决方案我的下一个问题,如果你想做与此完全相同的事情(使用TextBox和button),该怎么办,但是文本框位于自定义控件上,而按钮位于包含该自定义控件的窗口上?
<StackPanel>
    <TextBox Name="txtbx" />
    <Button Content="Click Me!" FocusManager.FocusedElement="{Binding ElementName=txtbx}"/>
</StackPanel>