WPF-为什么不';t键盘。Focus()工作正常吗?
在TabItem控件上有一个TextBox项(MyTextBox)。我的代码如下所示: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
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
}
)
);