Встановлення порядку вкладок у WPF


92

Як встановити порядок вкладок у WPF? У мене є ItemControl, де деякі елементи розгорнуті, а деякі згорнуті, і я хотів би пропустити згорнуті, коли я роблю вкладки.

Будь-які ідеї?


Запропонована відповідь Джессі - це шлях ...
Роман,

що виявляється поведінкою за замовчуванням?
JonnyRaa

@ Роман, хто такий Джессі?
Stealth Rabbi

1
@ Stealth Rabbi: обрана відповідь. Можливо, назва змінилася (з 11 років тому 😆)
Роман,

Відповіді:


63

Ви можете пропустити елементи в послідовності вкладок, встановивши KeyboardNavigation.IsTabStop на елементі в XAML.

KeyboardNavigation.IsTabStop="False"

Ви можете встановити тригер, який би перемикав цю властивість на основі розширеного стану.


1
Ви також можете Focusable = "False", який видаляє його з фокусу клавіатури, а також порядку вкладок.
Geoff Cox

2
@Geoff Я зробив це за допомогою купи кнопок, і це не спрацювало, просто так.
ToastyMallows

Це дозволяє пропускати елементи керування, які ви не хочете брати участь у впорядкуванні вкладок, але в WPF є багато інших проблем. Впорядкування вкладок не є ієрархічними, тому, якщо на екрані є інші елементи керування, які мають нульове впорядкування (що вони роблять за замовчуванням), впорядкування вкладок просто не працюватиме.
Крістіан Фіндлі

90

Якщо ви хочете явно встановити порядок вкладок для елементів у вашій формі, така вкладена властивість повинна допомогти:

<Control KeyboardNavigation.TabIndex="0" ... />

Я кажу "мав би допомогти", оскільки я вважав це не дуже надійним, хоча, мабуть, мені потрібно прочитати більше про те, як це передбачається використовувати. Я публікую цю напівспечену відповідь, бо ніхто інший не згадав про цю властивість.


Зверніть увагу, що в Win RT властивість справедлива TabIndex="0".


11
Фокус полягає у використанні TabIndex з різними значеннями KeyboardNavigation.TabNavigation у батьківському елементі. Я найчастіше використовую "Місцевий" TabNavigation. :)
Грег Д

Мені довелося додати це до кожного з моїх елементів керування, замість того, щоб просто додавати їх до різних панелей StackPanel, на яких розміщуються зазначені елементи керування.
DJ van Wyk

Я вважаю, налаштування <DockPanel Panel.ZIndex="2">допомагає впорядкувати точку входу панелей верхнього рівня.
avenmore

25

<Control KeyboardNavigation.TabIndex="0" ... /> Працює чудово ... Наприклад-

<ComboBox Height="23" 
          Margin="148,24,78,0" 
          Name="comboBoxDataSet"
          VerticalAlignment="Top"
          SelectionChanged="comboBoxDestMarketDataSet_SelectionChanged"
          DropDownOpened="comboBoxDestMarketDataSet_DropDownOpened"
          KeyboardNavigation.TabIndex="0" />
<ComboBox Height="23" 
          Margin="148,56,78,0" 
          Name="comboBoxCategory" 
          VerticalAlignment="Top" 
          SelectionChanged="comboBoxDestCategory_SelectionChanged"
          DropDownOpened="comboBoxDestCategory_DropDownOpened"
          KeyboardNavigation.TabIndex="1" />

Дозволяє вам переміщатися між цими двома комбінованими полями за допомогою клавіші TAB.


13

Я думаю, що тут є набагато простіше рішення, у верхній частині вашого елемента керування чи вікна, або що завгодно, ви можете додати:

KeyboardNavigation.TabNavigation="Cycle"

Це також автоматично ігнорує згорнуті вкладки.


6

Ще одна альтернатива, яка працювала для мене в минулому, - це просто видалити всі явні TabIndexоператори, і дозволити елементам керування використовувати порядок, який вони оголосили в XAML, робити свою магію.

Звичайно, це може зажадати від вас упорядкування елементів керування. Але це проста операція копіювання-вставки.


5
Проблема в тому, що ви не можете просто перевпорядкувати елементи керування в таких речах, як DockPanels, де порядок їх додавання не відповідає порядку вкладок. Наприклад, розглянемо кнопки стикування праворуч. Ви стикуєте останню першу, другу до останньої секунди тощо, але ви хочете, щоб порядок вкладок був змінений. Це те, що найбільше мене спотикає. Такі часи я сумую за старими днями VB6 (не мовою, лише цією функцією), коли ви вибираєте "Встановити порядок вкладок" і просто клацаєте всі ваші елементи керування. Просто і солодко. Неприємно, що в нас у 2018 році нічого подібного немає.
Марк А. Донохо,

1
@Mark або 2020 :). Порядок вкладок у WPF шалено складний, коли мені потрібне замовлення на замовлення, я повинен проводити весь день у боротьбі з її непередбачуваністю. У Winforms це було буденне завдання, яке займає кілька хвилин на вікно.
bokibeg

0

Ви можете використовувати KeyboardNavigation.TabNavigation = "None", щоб повністю пропустити вкладки для конкретного контролю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.