0

フレックスでは、スパークスキンが最適です。コンポーネントのカスタマイズには数分かかります。Mxコンポーネントの取り扱いは非常に困難です。メニューバーコンポーネントでメニューの背景を変更する方法を理解するのに2日かかりました。そして、私がそれを達成するための正しい方法を見つけたとき(http://goo.gl/Tu5Wc)、それは単に機能しません。私は自分の問題を実証するために非常に簡単なアプリケーションを作成しました:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               creationComplete="application1_creationCompleteHandler(event)">

    <fx:Script>
        <![CDATA[
            import mx.collections.XMLListCollection;
            import mx.events.FlexEvent;
            private var menubarXML:XMLList =
                <>
                    <menuitem label="Client">
                        <menuitem label="Profile"/>
                        <menuitem label="Documents"/>
                    </menuitem>
                    <menuitem label="Others">
                        <menuitem label="Profile"/>
                        <menuitem label="Documents"/>
                    </menuitem>
                </>;
            [Bindable]
            public var menuBarCollection:XMLListCollection;
            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                menuBarCollection = new XMLListCollection(menubarXML);

            }

        ]]>
    </fx:Script>

    <fx:Style>
        @namespace mx "library://ns.adobe.com/flex/mx";
        mx|MenuBar.myStyle {
            backgroundColor: #ff0000;
        }
    </fx:Style>
    <mx:MenuBar height="30" labelField="@label" dataProvider="{menuBarCollection}" menuStyleName="myStyle"/>
</s:Application>

メニューの背景がまだ白い理由を誰かが説明できますか?

4

4 に答える 4

3

メニューバーはリストをレンダリングします... リストで動作するスタイルを CSS で設定するだけです (ctrl+bar では表示されません)。

mx|MenuBar{
    color:#BBBBBB;
    backgroundColor: #333333;
    contentBackgroundColor: #333333;
}

それだけ!簡単です:D

于 2012-12-27T20:32:28.627 に答える
1

そのためのCSSを変更できます...

以下は、CSS を作成し、現在のプロジェクトで使用するためのリンクです...

http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html

メニューバーを選択し、独自のスタイルの作成を開始します。また、別のコンポーネントのスタイルを設定するのにも役立ちます..

ごきげんよう - :)

于 2012-05-25T11:49:27.143 に答える
0

これが私が持ってきた解決策です。

カスタムMenuItemRendererを作成し、updateDisplayList関数に次の行を追加しました。

        this.graphics.clear();
        this.graphics.beginFill(BACKGROUND_COLOR);
        this.graphics.drawRect(-1, -1, unscaledWidth +1, unscaledHeight+2);
        this.graphics.endFill();

        if (Menu(listData.owner).isItemHighlighted(listData.uid)) { 
            this.graphics.clear();
            this.graphics.beginFill(0xb4c5d6);
            this.graphics.drawRect(0,0, unscaledWidth -2, unscaledHeight-1);
            this.graphics.endFill();        
        }

最初の部分は背景用で、2番目の部分はロールオーバー効果用です。

次に、標準のMenuBarコンポーネントを拡張し、次のようにgetMenuAt関数をオーバーライドしました。

    override public function getMenuAt(index:int):Menu
    {
        var menu:Menu = super.getMenuAt(index);
        menu.itemRenderer = new ClassFactory(CustomMenuItemRenderer);
        return menu;

    }

おそらくそれは可能な限り最良の解決策ではありませんが、私が思いついたのはそれだけです。それをもっと良くしてくれる人から聞いてみたいです。

ありがとう!

于 2012-05-28T22:21:21.750 に答える
0

より良い選択肢を見つけたと思います。

アプリで mx リストを使用していません。だから私はこれを使用しました:

mx|List
{
    backgroundColor:#666666;
}

とにかく、継承を使用して、この css をメニューにのみ使用できると思います。

于 2012-07-13T21:43:40.583 に答える