WPF-为什么不';t键盘。Focus()工作正常吗?

WPF-为什么不';t键盘。Focus()工作正常吗?,wpf,wpf-controls,Wpf,Wpf Controls,在TabItem控件上有一个TextBox项(MyTextBox)。我的代码如下所示: MyTextBox.Focus(); Keyboard.Focus(MyTextBox); 当我通过调试器运行此代码时,我会在执行这些行后看到以下内容: MyTextBox.IsFocused = true MyTextBox.IsKeyboardFocused = false 有人能告诉我为什么文本框没有接收键盘焦点吗?它只是一个已启用的标准文本框控件。MyTextBox.IsKeyboardFocus

在TabItem控件上有一个TextBox项(MyTextBox)。我的代码如下所示:

MyTextBox.Focus();
Keyboard.Focus(MyTextBox);
当我通过调试器运行此代码时,我会在执行这些行后看到以下内容:

MyTextBox.IsFocused = true
MyTextBox.IsKeyboardFocused = false

有人能告诉我为什么文本框没有接收键盘焦点吗?它只是一个已启用的标准文本框控件。

MyTextBox.IsKeyboardFocused
为false,因为您正在调试器下查看它,并且键盘焦点可能在Visual Studio中。。。尝试在没有断点的情况下调试焦点(例如
Debug.Write
或跟踪制动点),以查看运行时
MyTextBox.IsKeyboardFocused
的实际值


还要注意,
Focus()
方法返回布尔值,该值指示是否成功设置了焦点。在您的情况下,它是否返回
False
?如果是,我建议使用
Focus()
方法来找出问题所在。

当您尝试将焦点设置为除我们的coleague上面列举的内容之外的元素时,您还必须知道WPF不允许跨线程操作

在某些情况下,不会像Focus方法调用那样引发此异常。为了解决这个问题,我所做的是在一个动作中调用所有涉及键盘焦点的代码

此操作在control dispatcher内部运行,以确保我的代码不是从UI线程以外的其他线程执行的(例如计时器事件或从其他线程引发的事件):


3重要属性必须是
true
IsVisible=“true”
Focusable=“true”
<代码>IsEnabled=“True”

要成为可聚焦的,focusable和IsEnabled必须都为true


这里接受的答案并不能解决文本框无法获得焦点的问题,无论调试器告诉您什么。如果你有并且可以写你的文本框,那么你就可以把它放在键盘上


我在这里找到了解决问题的方法(并实际获得了焦点,不仅设置了值,使其看起来像调试器中的焦点),它非常接近巴甫洛夫的答案,而且使用了“焦点代码”:

这是为了确定。进行此调用时,您所说的控件上的选项卡项是否可见?我认为该控件必须是可见的,才能设置该属性。@Matt-谢谢。我查一下,我无法复制这个。
IsFocused
IsKeyboardFocused
都显示为True@RandyMinder:嗨!你发现什么问题了吗?我也有同样的问题。你接受的答案不能解决我的问题。谢谢你,我也在寻找解决办法,这对我来说是个好办法。多亏了这一点,我一直在尝试在刷新
可见性
绑定之前设置焦点(使用
MyTextBox.GetBindingExpression(VisibilityProperty.UpdateTarget();
解决)
MyTextBox.SelecAll()
现在也神奇地工作了。:)只想指出Control.focus()返回一个布尔值。Focus()返回一个IIInputElement()
[UIElement].Dispatcher.BeginInvoke(
      new Action(
         delegate{
             /// put your Focus code here
         }
      )
);