Не могу установить фокус клавиатуры на TextBox - PullRequest
1 голос
/ 05 июня 2019

Я использую пространство имен System.Windows.Controls для создания ContextMenu с несколькими элементами MenuItem.Один из MenuItems содержит TextBox в качестве заголовка, который при щелчке должен иметь фокус клавиатуры, чтобы пользователь мог ввести его, чтобы указать настройку конфигурации.Он успешно обнаруживает щелчок мыши, но меня сбивает с толку то, что я не могу установить фокус клавиатуры на нем.Я перепробовал все, что видел онлайн, к сожалению, с небольшим успехом.

В приведенном ниже коде показаны различные методы, которые я пытался придать клавиатуре.Я смог получить логический фокус только с одной из функций, но ничто не могло правильно настроить фокус клавиатуры.Я также попробовал все эти функции на родительском объекте TextBox, defineItem, но ничего не изменилось.

//*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

Я ожидаю, что фокус клавиатуры для SpecBox будет установлен в true, чтобы пользователь мог вводить его, но bool defineBox.IsKeyboardFocused всегда ложно после этих операций и не отлавливает никаких клавиш с клавиатуры.

...