首页 > 解决方案 > 无法将键盘焦点设置为文本框

问题描述

我正在使用 System.Windows.Controls 命名空间来创建一个包含多个 MenuItem 的 ContextMenu。其中一个 MenuItems 包含一个 TextBox 作为其标题,单击该标题时,应给予键盘焦点,以便用户可以键入它来指定配置设置。它成功检测到鼠标点击,但让我感到困惑的是我无法将键盘焦点设置在它上面。我已经尝试了我在网上看到的所有东西,但不幸的是收效甚微。

下面的代码显示了我尝试给它键盘焦点的不同方法。我只能通过其中一项功能获得逻辑焦点,但没有什么可以正确设置键盘焦点。我还在 TextBox 的父项指定项上尝试了所有这些功能,但没有什么不同。

//*Upon catching a mouse click event:*

MenuItem specifyItem = //MenuItem sent by the event;
TextBox specifyBox = //specifyItem's header;

bool hasLogicalFocus; //store results of attempting logical focus
bool hasKeyboardFocus; //store results of attempting keyboard focus

//attempt UIElement.Focus(); fails both
specifyBox.Focus();
hasLogicalFocus = specifyBox.IsFocused; //false
hasKeyboardFocus = specifyBox.IsKeyboardFocused; //false

//attempt Keyboard.Focus(specifyBox); fails both
Keyboard.ClearFocus(); // <-- did not make a difference
Keyboard.Focus(specifyBox);
hasLogicalFocus = specifyBox.IsFocused; //false
hasKeyboardFocus = specifyBox.IsKeyboardFocused; //false

//attempting asynchronous with dispatcher; fails both
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, new Action(delegate ()
{
    specifyBox.Focus();         // Set Logical Focus
    Keyboard.Focus(specifyBox); // Set Keyboard Focus
}));
hasLogicalFocus = specifyBox.IsFocused; //false
hasKeyboardFocus = specifyBox.IsKeyboardFocused; //false

/*This actually does set logical focus, but this isn't 
 * helpful because I need keyboard focus
 */
FocusManager.SetFocusedElement(specifyItem, specifyBox);
hasLogicalFocus = specifyBox.IsFocused; //true!
//still doesn't have keyboard focus

我希望将specifyBox 的键盘焦点设置为true,以便用户可以键入它,但是在这些操作之后布尔型specifyBox.IsKeyboardFocused 始终为false,并且它不会捕获键盘上的任何键。

标签: c#textboxfocus

解决方案


推荐阅读