2009-08-28 239 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