2010-09-19 157 views
1

我有一個擴展器,其內容由一個StackPanel組成,其中包含幾個元素之一,其中一個是TextBox無法設置元素的焦點

我想,當Expander擴大,TextBox應該獲得鍵盤焦點,我該怎麼做?

我想:

Private Sub xp_Expanded(sender As Object, e As RoutedEventArgs) _ 
    Handles xpUnits.Expanded 
     stackPanel.Focus() 
     Keyboard.Focus(textBox) 
    textBox.Focus() 
End Sub 

我甚至試圖設置FocusManager.IsFocusableFocusManager.FocusedElementTextBox,然後調用stackPanel.Focus(),但它並沒有做的工作。

回答

4

當您嘗試設置焦點時,您的TextBox可能還不可見。您應該爲IsVisibleChanged添加一個事件處理程序到您的TextBox並在那裏設置焦點。在xp_Expanded裏面,你應該設置一個布爾標誌,TextBox應該在下次調用IsVisibleChanged事件處理程序時集中。

+0

它的工作原理,但是是不是有一個更優雅的方式來做到這一點的XAML的方式,或者不必增加處理的文本框的這個IsVisible屬性? – Shimmy 2010-09-19 23:09:43

+0

這很奇怪,爲什麼在擴展事件中tb不可見? – Shimmy 2010-09-19 23:12:52

+0

TextBox尚不可見,因爲在「Expanded」事件處理程序運行時,TextBox仍處於可見狀態。您可以使用類似於Dispatcher.BeginInvoke(DispatcherPriority.Background,new DispatcherOperationCallback(Window1.SetFocusToTextBoxAsync),textBox);而不是IsVisibleChanged事件處理程序;'這可能會在TextBox變得可見之後運行。 – 2010-09-20 09:21:23

0

This answer解決我的問題很容易:

<TextBox Text="{Binding Title}" 
    FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/> 
+0

由於某種原因,這並不適用於我,效果是讓擴展器自動擴展,但文本框沒有焦點。我嘗試了@fmunkert解決方案並運行良好。 :) – OscarRyz 2012-05-29 22:53:11

相關問題