如何避免在wpf中单击按钮时文本框失去焦点?
现在光标在文本框中聚焦。如果我单击按钮(RemoveLostFocus),文本框的失去焦点事件将被触发。但我需要的是,文本框的失焦事件不应该触发。有什么办法吗如何避免在wpf中单击按钮时文本框失去焦点?,wpf,textbox,Wpf,Textbox,现在光标在文本框中聚焦。如果我单击按钮(RemoveLostFocus),文本框的失去焦点事件将被触发。但我需要的是,文本框的失焦事件不应该触发。有什么办法吗 private void Window_Loaded(object sender, RoutedEventArgs e) { txtUserName.Focus(); } private void UserName_LostFocus(object sender, RoutedEventArgs e)
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
?当我聚焦到此处未提及的另一个文本框时,AIKText.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>