2009-08-28 187 views

回答

99

在XAML:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}"> 
    <TextBox Name="Box" /> 
</StackPanel> 
+7

因爲它與MVVM保持一致,所以我更喜歡這種方法。 – 2014-02-24 15:05:29

+1

焦點元素是隻讀的正確的如何在xaml中設置? 我用這個,它沒有工作 WPFKK 2016-02-05 14:39:53

+0

@ user841612,請檢查以下鏈接並驗證程序集和命名空間https://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.focusedelement%28v=vs.110%29。 aspx – usefulBee 2016-02-10 22:03:20

43

嘗試FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID) 
+4

如果要將焦點設置爲*的元素是*父元素o.O,該怎麼辦? – 2013-12-02 23:04:35

+7

FocusManager.SetFocusedElement(FocusManager.GetFocusScope(parentElement),parentElement); – Philter 2015-03-18 20:31:10

20
txtCompanyID.Focusable = true; 
Keyboard.Focus(txtCompanyID); 

MSDN:

只能有一個具有鍵盤焦點的 整個桌面上的元素。 在WPF中,具有鍵盤 焦點的元素將使IsKeyboardFocused集合 爲true。

您可能會破壞設置行並檢查IsKeyboardFocused屬性的值。此外,請檢查您是否真的到達該線路,或者您是否設置了其他元素以便在此之後獲得焦點。

15

試試這個:MyTextBox.Focus ();

+0

這是最優雅的答案,它並不要求您指定父級。感謝這個,它對我很好! – dbeachy1 2015-02-20 04:00:06

7

這一切都不爲我工作,因爲我是用一個網格,而不是一個StackPanel。

我終於找到了這個例子: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

,並修改爲這樣:

在 '資源' 部分:

<Style x:Key="FocusTextBox" TargetType="Grid"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True"> 
       <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

在我的網格定義:

<Grid Style="{StaticResource FocusTextBox}" /> 
+1

這也適用於我。其餘的不是。感謝您的鏈接,這非常有趣。另外有趣的是,這樣一個簡單的事情可以如此複雜。 – TravisWhidden 2015-10-01 04:05:27

+2

無論容器是Gird還是StackPanel,以上答案都可以正常工作。由於您的網格結構不清晰,因此很難說出可能出錯的地方。很高興看到替代品。 – usefulBee 2015-10-22 14:19:36

+1

對我來說,這也是唯一能正確工作的人。好方法。 – OregonGhost 2016-10-07 14:24:14

19

迄今爲止沒有人解釋爲什麼th問題中的代碼不起作用。我的猜測是代碼被放置在Window的構造函數中。但目前現在確定重點還爲時過早。它必須在窗口準備好進行交互後完成。代碼的最佳位置是Loaded事件:

public KonsoleWindow() { 
    public TestWindow() { 
    InitializeComponent(); 
    Loaded += TestWindow_Loaded; 
    } 

    private void TestWindow_Loaded(object sender, RoutedEventArgs e) { 
    txtCompanyID.Focus(); 
    } 
} 
+5

最有用的答案在這個整體線程 – Airhead 2016-10-17 21:18:28