3

平日と週末で DateChooser / CalendarLayout の色を変えたいと思います。また、カスタム スタイル名を使用してこれを実現したいと思います (例: "weekColor" と "weekendColor".

これをどのように達成できるか考えていますか?

乾杯、リック

4

2 に答える 2

3

数日かかりましたが、私はそれを見つけました。今後の参考のために:ここに私の解決策があります:

DateChooser を拡張し、関数 updateDisplayList(w:Number, h:Number) にオーバーライドを追加しました (この関数では、SMTWTFS の曜日名が設定されています)。

updateDisplayList では、CalendarLayout のすべての値を含む mx_internal::dateGrid.dayBlockArrays[column][row] を取得できます。その配列 / 配列では、各列の最初の行が SMTWTFS の日です。他の行は dayNumbers です。週末の日が何であるかを判断し、それに応じて色を調整することが問題であることがわかったら. 以下に示すように:

override protected function updateDisplayList(w:Number, h:Number):void
    {
        super.updateDisplayList(w, h);



        // Now the dayBlocksArray has been filled. The Array looks as follows 
        // dayBlocksArray["rows"]["columns] .... therefor [i][0 (zero)] will always get the dayNames (SMTWTFS)
        // Compare the dayNames with the set this.dayNames (which always start with sunday) and find the weekend days
        var colIndex:uint = 0;
        var rowIndex:uint = 1; // The first row (SMTWTFS) is handled seperately
        var currentColumn:Array;
        var dayName:UITextField;
        var backgroundColor:uint = this.getStyle("dayNamesBackgroundColor");
        var isWeekendCol:Boolean = false;
        var currentTextFormat:TextFormat;

        // When the style is not found the default of white will be used.
        if (!backgroundColor)
        {
            backgroundColor = 0xFFFFFF;
        }

        for (colIndex; colIndex < 7; colIndex++)
        {
            // First determine if the first item in this row (SMTWTFS) is a week/weekend day
            currentColumn = mx_internal::dateGrid.dayBlocksArray[colIndex];
            dayName = currentColumn[0];

            // Determine if this is a weekend row
            // The dayNames array is fixed in the order of index 0 = sunday and index 6 = saturday. 
            // Therefor check of the text value of the current dayName is equal to either of 
            // those two. If it is we are dealing with a weekend column
            isWeekendCol = dayName.text == this.dayNames[0] || dayName.text == this.dayNames[6];

            if (isWeekendCol)
            {
                // Set the color
                currentTextFormat = dayName.getTextFormat();
                currentTextFormat.color = getStyle("weekendHeaderColor");
                dayName.setTextFormat(currentTextFormat);

                // Set the background color
                dayName.background = true;
                dayName.backgroundColor = backgroundColor;
            }
            else
            {
                currentTextFormat = dayName.getTextFormat();
                currentTextFormat.color = getStyle("weekHeaderColor");
                dayName.setTextFormat(currentTextFormat);

                // Set the background color
                dayName.background = true;
                dayName.backgroundColor = backgroundColor;
            }

            // Reset the rowIndex
            rowIndex = 1;

            // Now go through all the other rows of this column
            for (rowIndex; rowIndex < currentColumn.length; rowIndex++)
            {
                dayName = currentColumn[rowIndex];

                if (isWeekendCol)
                {
                    dayName.setColor(getStyle("weekendColor"));
                }
                else
                {
                    dayName.setColor(getStyle("weekColor"));
                }
            }
        } 
}

CSS ファイルに次のスタイルを追加しました。

DateChooser {

コーナー半径: 0; headerColors: #FFFFFF、#FFFFFF; 今日色: #00448c; 境界線のスタイル:なし; dropShadowEnabled: false; fontFamily: myGeorgia; dayNamesBackgroundColor: #ECECEC; weekHeaderColor:#444444; 週末ヘッダーの色:#DDDDDD; weekColor:#00317F; 週末の色: #DDDDDD; headerStyleName: "dateChooserHeaderStyle";
コンボボックススタイル名: "コンボボックススタイル名"; }

ここで最も興味深いスタイルは、カスタム スタイル "dayNamesBackgroundColor" (SMTWTFS セットに背景色を与えるために使用される) とカスタム スタイル "weekendHeaderColor"、"weekHeaderColor"、"weekColor"、"weekendColor" です。

上記の方法でこれらの色を読み取って、SMTWTFS セットが日番号とは異なる色を取得できる週/週末の色の違いを完全に制御します

これが将来他の人々に役立つことを願っています。それを理解するのに多くの時間がかかりました:)

于 2011-05-09T13:49:00.737 に答える
2

私はクライアントのために似たようなことをしました。アプローチは、CalendarLayout クラスを拡張してこれらのスタイルを受け入れ、関連する日のスタイルを変更することです。次に、同じスタイルを受け入れるように DateChooser を拡張し、新しい CalendarLayout クラスに渡します。

面倒です。プライベート変数の問題に遭遇する可能性が最も高いでしょう。しかし、それは実行可能です。

于 2011-05-05T13:01:35.477 に答える