平日と週末で DateChooser / CalendarLayout の色を変えたいと思います。また、カスタム スタイル名を使用してこれを実現したいと思います (例: "weekColor" と "weekendColor".
これをどのように達成できるか考えていますか?
乾杯、リック
平日と週末で DateChooser / CalendarLayout の色を変えたいと思います。また、カスタム スタイル名を使用してこれを実現したいと思います (例: "weekColor" と "weekendColor".
これをどのように達成できるか考えていますか?
乾杯、リック
数日かかりましたが、私はそれを見つけました。今後の参考のために:ここに私の解決策があります:
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 セットが日番号とは異なる色を取得できる週/週末の色の違いを完全に制御します
これが将来他の人々に役立つことを願っています。それを理解するのに多くの時間がかかりました:)
私はクライアントのために似たようなことをしました。アプローチは、CalendarLayout クラスを拡張してこれらのスタイルを受け入れ、関連する日のスタイルを変更することです。次に、同じスタイルを受け入れるように DateChooser を拡張し、新しい CalendarLayout クラスに渡します。
面倒です。プライベート変数の問題に遭遇する可能性が最も高いでしょう。しかし、それは実行可能です。