MenuFlyout всегда фокусируется на втором пункте, когда нажата клавиша «вниз» в UWP? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть следующий код:

Button b=new Button();
Button.Content="Button";
Button.Click+=Click;
MenuFlyout MenuFlyout = new MenuFlyout();
MenuFlyoutItem MenuFlyoutItem1 = new MenuFlyoutItem();
MenuFlyoutItem MenuFlyoutItem2 = new MenuFlyoutItem();
MenuFlyoutItem MenuFlyoutItem3 = new MenuFlyoutItem();
MenuFlyoutItem1.Text="Prem";
MenuFlyoutItem2.Text="Kumar";
MenuFlyoutItem3.Text="Deepak";
MenuFlyout.Items.Add(MenuFlyoutItem1);
MenuFlyout.Items.Add(MenuFlyoutItem2);
MenuFlyout.Items.Add(MenuFlyoutItem3);


private void Click(object sender, RoutedEventArgs e)
{
      Button.ContextFlyout = menuFlyout;
      menuFlyout.ShowAt(Button, new Point(-20, 20));   
}

MenuFlyout открывается идеально, но когда открывается MenuFlyout, если я нажимаю клавишу «Вниз», она всегда фокусирует вторую MenuFlyoutItem. Я не знаю, почему он не фокусируется на первом MenuFlyoutItem. Я хочу, чтобы он сначала фокусировался MenuFlyoutItem при нажатии клавиши вниз и т. Д.

1 Ответ

2 голосов
/ 26 марта 2020

На самом деле, когда вы нажимаете, первый пункт меню фокусируется, хотя он не виден визуально. Вы можете подтвердить это, нажав кнопку, а затем нажав клавишу Enter . Тот факт, что элемент не выделен визуально, заключается в том, что вы щелкнули мышью, поэтому элемент управления предполагает, что вы продолжите взаимодействие с мышью, которая вместо этого имеет эффекты при наведении.

Starting click by mouse

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

Keyboard click

Такое поведение согласуется с остальной частью системы, поэтому лучше сохранить его, так как пользователи могут зависеть

Как дополнительный совет, вам не нужно прикреплять всплывающее окно во время события click, но вы можете просто установить Button.Flyout заранее и просто удалить обработчик Click:

b.Flyout = MenuFlyout;

ContextFlyout обычно используется для события щелчка правой кнопкой мыши. Чтобы раскрывающийся список открывался под элементом управления, вы можете установить его свойство Placement:

MenuFlyout.Placement = FlyoutPlacementMode.Bottom;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...