2013-10-17 32 views
1

在我的程序中,我有一個用戶控件,它使用內容展示器在窗口上顯示數據。我想在啓動時在我的窗口中簡單地將光標對焦設置爲某個textBox將焦點設置在UserControl中的TextBox中

通常我會通過這個窗口的代碼隱藏做到這一點,是這樣的:textBox.Focus();

然而,textBox在用戶控件定義,似乎不相同的方式工作。到目前爲止,我已經在用戶控件的代碼隱藏中嘗試了與上面相同的方法。

爲什麼不能正常工作?如果在用戶控件中定義textBox,我如何設置焦點?

我已經試過....:

用戶控制:

public UserControl() 
{ 
    InitializeComponent(); 

    FocusManager.SetFocusedElement(this, textBox); 
} 

用戶控制:

public UserControl() 
{ 
    InitializeComponent(); 

    textBox.Focusable = true; 
    Keyboard.Focus(textBox); 
} 
+0

http://stackoverflow.com/questions/817610/wpf-和初始焦點 –

回答

3

試試這個:FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, textBox) 

或從msdn我們bsite:

textBox.Focusable = true; 
Keyboard.Focus(textBox); 

注意:您不能在構造函數中設置焦點。如果你是這樣的話,UI元素還沒有被創建。您應該在控件的加載事件期間設置焦點。

+0

好吧,我試圖在用戶控件的構造函數中設置焦點。我的控件的加載事件究竟在哪裏(哪個是'textBox')? –

+0

我已經在我的用戶控件的構造函數中嘗試了這兩個東西。沒有任何影響。 –

+2

'private void Document_Loaded(object sender,RoutedEventArgs e){textbox.Focusable = true; textbox.Focus();}' – JTFRage

1

您可以嘗試設置或Initialized事件User control的焦點。例如:

private void MyWpfControl_Load(object sender, EventArgs e) 
{ 
    textBox.Focusable = true; 
    Keyboard.Focus(textBox); 
} 

信息:Loaded eventInitialized event

1

來得有點晚,但它的真正工作了我是

public UserControl() 
    { 
     InitializeComponent(); 

     Dispatcher.BeginInvoke(new System.Action(() => { Keyboard.Focus(TextBox); }), 
           System.Windows.Threading.DispatcherPriority.Loaded); 
    } 
相關問題