Я использую пространство имен 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 всегда ложно после этих операций и не отлавливает никаких клавиш с клавиатуры.