Flex: Кто-нибудь знает компонент TabNavigator, который позволяет использовать HTML-ярлыки на вкладках или как это сделать? - PullRequest
1 голос
/ 28 июня 2009

Я пытаюсь поместить ярлыки в формате html на вкладки TabNavigator.

Я видел SuperTabNavigator во FlexLib, но, похоже, он мне не помог.

Я нашел этот HTML-код кнопки и смог внедрить свой собственный TabBar и заставить его изменить класс, созданный ClassFactory при создании navItem.

HtmlTabNavigator:

public class HtmlTabNavigator extends TabNavigator
{
    public function HtmlTabNavigator()
    {
        super();
    }


    override protected function createChildren():void
    {
        if (!tabBar)
        {
            tabBar = new HtmlTabBar();  // inject my class
            tabBar.name = "tabBar";
            tabBar.focusEnabled = false;
            tabBar.styleName = new StyleProxy(this, tabBarStyleFilters);
            rawChildren.addChild(tabBar);

            if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
            {
                tabBar.setStyle("paddingTop", 0);
                tabBar.setStyle("paddingBottom", 0);
                tabBar.setStyle("borderStyle", "none");             
            }
        }

        super.createChildren(); // ommits original TabBar creation but continues in inheritance chain
    }


    public function setHtmlLabels( htmlLabels:Array ):void
    {

        for (var i:uint = 0; i < tabBar.numChildren; i++)
        {
            var button:Button = tabBar.getChildAt( i ) as Button;
            button.label = htmlLabels[ i ];
        }
    }
}

HtmlTabBar:

public class HtmlTabBar extends TabBar
{
    public function HtmlTabBar()
    {
        super();

        navItemFactory = new ClassFactory(HtmlButton);
    }
}

Теперь у меня проблемы со стилем кнопки, так как она выглядит как обычная кнопка, а не как вкладка. Мне не понятно, почему это работает при использовании ButtonBarButton.

Любые идеи приветствуются.

Спасибо Stefan

Ответы [ 3 ]

0 голосов
/ 20 июля 2009

С наилучшими пожеланиями,

Следуя вашему примеру, я пытался специализировать TabBar для использования пользовательской кнопки с функциональностью мнемонической метки, но я получаю ошибку времени компиляции:

1178: попытка доступа недоступна свойство navItemFactory через ссылка со статическим типом AspMnemonicTabBar.

Чтение исходного кода Flex Я обнаружил, что оно принадлежит частному пространству имен mx_internal . Так как я могу получить к нему доступ, чтобы установить новый ClassFactory ??

package
{
    import mx.controls.TabBar;
    import mx.core.ClassFactory;

    public class AspMnemonicTabBar extends TabBar
    {
        public function AspMnemonicTabBar()
        {
            super();
            navItemFactory = new ClassFactory(AspMnemonicButton);
        }
    }
}
0 голосов
/ 29 августа 2009

Алессандро, navItemFactory находится в пространстве имен mx_internal. Получите доступ к нему через mx_internal :: navItemFactory или поместите следующую строку ниже ваших операторов импорта: использовать пространство имен mx_internal;

0 голосов
/ 05 июля 2009

Как вы упомянули, я думаю, что лучше всего создать собственный компонент для этого сценария. Вы можете рассмотреть возможность использования textArea с editable = false для части вкладки, поскольку я считаю, что htmlText может отображаться в этом компоненте.

Редактировать: Можете ли вы изменить SuperTabNavigator и добавить textArea ..., чтобы исходная метка для вкладки могла быть пустой (если вы не можете ее удалить), тогда поверх нее будет textArea.

...