2013-02-28 236 views
4

enter image description here如何在单击wpf中的按钮时避免丢失TextBox的焦点?

现在光标正在对焦在文本框中。如果我点击Button(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(); 
    } 
+0

的链接什么ü尝试? – 2013-02-28 10:24:52

+0

我试过一些验证,它会提示为消息窗口。如果我点击取消按钮。验证部分正在执行。 – 2013-02-28 10:30:29

+0

什么时候应该可以使用'Text.Length <0'? – LPL 2013-02-28 10:47:29

回答

-1

Focusable Property

<Button Focusable="False" /> 
+1

我用你的代码虽然,引发LostFocus解雇。我将编辑我的真实场景。 – 2013-02-28 10:38:37

+0

随着'this.Close()'在你的按钮处理您提高'LostFocus'事件。你想结束什么? – LPL 2013-02-28 10:54:42

+0

导航到另一个窗口。 – 2013-02-28 10:57:00

-1

在您按一下按钮,事件中,你可以这样做

this.textBox.Focus(); 

如果引发LostFocus法看起来是这样的:

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

可以防止引发LostFocus用下面的代码:

this.textBox.LostFocus -= UserName_LostFocus; 
+0

请参阅我编辑的代码。当我点击取消按钮TextBox的失去焦点事件被解雇和失去焦点事件的逻辑执行。但我不想这样。 – 2013-02-28 10:44:18

6

您将要使用的FocusManager附加属性将焦点应用于TextBoxButton焦点更改

例子:

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

有了这个解决方案的TextBox将在按下Button总是甚至集中和TextBoxLostFocus前夕新台币不会被解雇

+1

+1,这个解决方案对我很好。 – 2013-05-03 17:27:48

+0

+1(在容器上)+'FocusManager.IsFocusScope' - 实际工作的唯一解决方案 – NSGaga 2013-05-03 18:15:45

+0

我的下一个问题是,如果你想做同样的事情(使用TextBox和Button),但Textbox是在自定义控件上,并且该按钮位于包含该自定义控件的窗口上? – 2013-05-07 00:13:09

相关问题