Ограничить навигацию по вкладке элементом UI - PullRequest
0 голосов
/ 05 июня 2018

Я создаю приложение UWP.В настоящее время я работаю над тем, чтобы сделать его более доступным, поэтому я использую его только с клавиатуры и перемещаюсь с помощью клавиши tab .

Иногда я показываю UserControl с 2 кнопками, используя весь экран, оставляя остальные элементы страницы на заднем плане.Но если я использую вкладку, чтобы перейти к этим 2 кнопкам, фокус быстро переходит на элементы фона, и это то, чего я пытаюсь избежать.

Я хочу, чтобы вкладка фокусировалась только на этих 2 кнопкахиз пользовательского элемента управления, который я отобразил.

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

Любые идеи о том, как можно ограничить навигацию по вкладкамвнутри UserControl?

1 Ответ

0 голосов
/ 05 июня 2018

Когда вы показываете UserControl, вы можете запустить модификацию макета, установив IsTabStop свойство зависимости в false для элементов, присутствующих в фоновом режиме.

Либо это, либо вы также можете отключить элементы в фоновом режиме, но это также изменит внешний вид элементов управления, что может быть нежелательно для ваших конкретных намерений.

  • ВВ случае, если существует множество элементов, для которых IsTabStop должно быть установлено значение false, вместо определения атрибута идентификатора с помощью x:Name и необходимости ссылаться на каждый из них в коде позади, я бы предложил выполнить цикл по макету * 1012.* свойство зависимостей и измените свойства элементов управления таким образом.

Обновление:

Я неправильно понял ваше требование.После перечитывания я понимаю, каковы ваши цели, и, кажется, они достижимы на основе документации!

Взглянув на Tab Navigation здесь и Control Group документация, указано, что вы можете настроить навигацию управления, используя следующие свойства API:

XYFocusKeyboardNavigation включает навигацию по клавишам со стрелками между элементами управления

TabFocusNavigation указывает, есть ли несколько остановок табуляции или одна остановка табуляции

FindFirstFocusableElement и FindLastFocusableElementфокусируется на первом элементе с помощью клавиши Home и последнем элементе с помощью клавиши End

. Взглянув на шаблон, мы видим следующее VisualState, определенное для ContentDialog:

<VisualState x:Name="DialogShowing">
    <VisualState.Setters>
        <Setter Target="LayoutRoot.Visibility" Value="Visible" />
        <Setter Target="BackgroundElement.TabFocusNavigation" Value="Cycle" />
    </VisualState.Setters>
</VisualState>

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

В приведенных выше ссылках документация великолепна, и для каждого возможного значения, которое можно установить для TabFocusNavigation, есть графическое представление.

Причина, по которой ваш UserControl не работал должным образом, заключается в том, что его поведение при навигации соответствует соглашениям для сценария Local .

...