Как получить порядок табуляции по умолчанию в WPF (то есть порядок визуального дерева)?

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

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


person NielW    schedule 20.06.2016    source источник
comment
Вы пытались вызвать все элементы управления, а затем получить их текущий tabindex? Если да, то что еще вы пробовали?   -  person Sinnich    schedule 21.06.2016
comment
Если явно не задано, для текущего индекса вкладки устанавливается значение Int Max, что просто означает переход в порядке визуального дерева. Да, я пробовал это.   -  person NielW    schedule 21.06.2016


Ответы (1)


После пары дней исследований я понял, что это не предусмотрено из коробки. В конце концов, я просто вызвал FindVisualChildren, чтобы получить все FrameworkElements, и если элемент управления реализовал мой интерфейс IValidatable, я назначил ему следующий доступный индекс из счетчика. Мне пришлось добавить свойство зависимости под названием Order, чтобы заставить его работать (я не хотел возиться с существующим TabIndex). Затем, когда я получил список элементов управления, нуждающихся в проверке, я просто отсортировал их по порядку.

Это определенно не масштабируемое решение, но, к счастью, мне нужно запустить его только один раз.

Если у кого-то есть лучшее решение, ПОЖАЛУЙСТА, опубликуйте его. Я чувствую себя грязным.

person NielW    schedule 22.06.2016