Как я могу вкладывать через компонент ButtonBar во Flex? - PullRequest
1 голос
/ 12 сентября 2008

У меня есть панель кнопок inf flex, а также несколько других элементов управления вводом, я установил свойство tabIndex для каждого элемента управления, и все идет хорошо, пока я не переключусь на ButtonBar.

ButtonBar имеет 3 кнопки, но при нажатии на них только первая кнопка получает фокус, снова вкладка, и фокус возвращается к верхнему элементу управления ...

Как сделать так, чтобы вкладки проходили через ВСЕ кнопки на панели кнопок Flex? Есть ли способ сделать это или мне нужно создать отдельные кнопки для этого?

Это кажется мне возможной ошибкой ...

1 Ответ

3 голосов
/ 12 сентября 2008

Компонент написан таким образом, что пользователь должен нажимать клавиши со стрелками влево / вправо, когда фокус находится в пределах полосы, чтобы перемещаться по кнопкам - это довольно стандартное поведение графического интерфейса пользователя (вы также видите это в других местах, таких как группы переключателей) , Если вы посмотрите на источник SDK для ButtonBar , вы увидите, где они явно отключили фокус вкладки для каждой дочерней кнопки при ее создании:

override protected function createNavItem(
                                        label:String,
                                        icon:Class = null):IFlexDisplayObject
    {
        var newButton:Button = Button(navItemFactory.newInstance());

        // Set tabEnabled to false so individual buttons don't get focus.
        newButton.focusEnabled = false;
    ...

Если вы действительно хотите изменить это поведение, вы можете создать подкласс для этого, что-то вроде этого:

package {
    import mx.controls.Button;
    import mx.controls.ButtonBar;
    import mx.core.IFlexDisplayObject;

    public class FocusableButtonBar extends ButtonBar {
        public function FocusableButtonBar()
        {
            super();
            this.focusEnabled = false;
        }

        override protected function createNavItem(
                    label:String, icon:Class=null):IFlexDisplayObject
        {
            var btn:Button = Button(super.createNavItem(label, icon));
            btn.focusEnabled = true;
            return btn;
        }
    }
}
...