Из того, что вы «узнали», я обнаружил, что первое и второе были ложными, а третье и четвертое - правдой. Но я использую Flex 3.3.0.4852 для некоторых приложений и Flex 4 для некоторых приложений. Это, вероятно, имеет значение.

ок гибких вкладок важен как для удобства использования (очевидно), так и для доступности (он определяет порядок чтения чтения с экрана). Однако Flex 3.5, похоже, почти не имеет поддержки, чтобы повлиять на него для более сложных приложений.

Из того, что я знаю до сих пор:

порядок вкладок рассчитывается mx.managers.FocusManager, который заботится об одном «цикле вкладок» для всего приложения (т. е. не один для каждого контейнера, а один для всего приложения). Исключением являются встроенные файлы .swf и всплывающие окна, каждый из которых имеет свой собственный FocusManager.

логика внутри FocusManager помечена как приватная, а класс создается в Application.initialize (), поэтому изменить поведение непросто (если не считать перезаписи частей SDK, что может привести к проблемам с лицензией)

Упорядочивание вкладок ищет каждое свойство tabIndex (int) компонентов. Все компоненты, для которых установлено это свойство (> 0), упорядочены по его значению, в противном случае используется визуальная иерархия (которая использует вложение контейнера и дочерний порядок внутри контейнеров).

Все компоненты без tabIndex сортируются по порядку после компонентов, для которых они установлены (внутренне «tabIndex not set» сопоставляется с «tabIndex = int.MAX_VALUE)»

два компонента с одинаковым tabIndex упорядочены по визуальной иерархии.

Это означает, что вы можете либо использовать автоматическое упорядочение по визуальной иерархии (в основном то, что вам нужно), либо вы можете использовать указание tabIndexes напрямую - НО, если вы сделаете это, вы полностью испортите автоматическое упорядочение. Это особенно плохо, если вы работаете с пользовательскими компонентами и хотите изменить порядок вкладок внутри них: как только вы это сделаете, вы испортили порядок вкладок для всех экранов, использующих ваш компонент. Также вы не можете просто установить порядок вкладок только в файле верхнего уровня mxml, так как часто у вас нет доступа к внутренней работе компонентов, которые вы используете.

Пример:

accVerticalStuff.mxml

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Label text="One"/>
    <mx:TextInput tabIndex="1" id="One" />

    <mx:Label text="Two" />
    <mx:TextInput tabIndex="2" id="Two"/>

    <mx:Label text="Three" />
    <mx:TextInput tabIndex="3" id="Three"/>

</mx:VBox>

Application.mxml

Ожидаемый результат: порядок табуляции будет сначала тремя вертикальными элементами слева, а затем тремя вертикальными элементами справа, то есть сгруппированными по контейнерам. TopLevelElement является первым в порядке табуляции. (он работает точно так же, если не указан tabIndex, однако тогда мы не сможем фактически изменить tabIndex, например, на переключатели One и Three по тем причинам, по которым мы могли бы это сделать)

Фактический результат: порядок вкладок горизонтальный, то есть между двумя формами ввода. TopLevelElement (без указанного tabIndex) является последним в порядке табуляции.

Изменение вложенности контейнеров не будет работать в модульных проектах, а изменение порядка дочерних элементов повлияет на их позицию отображения (тогда как переход к контейнеру Canvas теряет AutoLayout).

Есть ли способ (возможно, сложный, но желательно не переписывающий SDK) указать порядок вкладок для отдельных компонентов, независимо от других компонентов?

Если все остальное не поможет, поможет ли обновление до Flex4 решить эту проблему?

Ответы на вопрос(2)

Ваш ответ на вопрос