2013-02-28 69 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

相關問題