2010-09-28 4 views
2

У меня есть массив дней. Я хочу, чтобы те дни имели другой фоновый цвет в компоненте DateChooser, например красный.Flex 4 DateChooser

Как я могу это сделать?

ответ

3

DateChooser не так просто настроить!

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

public class FancyDateChooser extends DateChooser { 
    public var fancyStyleName : String; 
    public var dayToMakeFancy : String; 

    protected override createChildren() : void { 
     super.createChildren(); 
     var dateGrid : UIComponent = mx_internal::dateGrid; 
     for (var i: int = 0; i < dateGrid.numChidren; i++) { 
      if ((dateGrid.getChildAt(i) as IUITextField).text == dayToMakeFancy) { 
       dateGrid.getChildAt(i).styleName = fancyStyleName; 
      } 
     } 
    } 
} 
+0

Спасибо, Грегор. Что будет делать. Я надеялся, что мне не придется расширять класс, но, похоже, я не могу уйти без него. Интересно, будет ли пользовательский скин. – Francisc

0

Вы должны использовать disabledRanges и disabledColor. Ниже приведен пример example «Примеры Flex».

+0

Но я не хочу их отключать, я хочу, чтобы они были полезными, только что обозначенными. Плюс есть 2 или 3 цвета, которые я хочу использовать. – Francisc

+0

Упс, я спал у выключателя. – splash

+0

Без проблем, спасибо за попытку. :) – Francisc

2

Благодарим за долю Грегора Кидди. Я немного изменил код Грегора Кидди. Пусть он может вводить несколько дат.

public class MyDateChooser extends DateChooser 
{ 
    public var highlightColor : Number = 0xff0000; // sample 
    public var highlightDate : Array = ["10","20"]; // sample 

    public function MyDateChooser() 
    { 
     super(); 
    } 

    protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { 
        super.updateDisplayList(unscaledWidth, unscaledHeight); 
        var dateGrid : UIComponent = mx_internal::dateGrid; 
        for (var i: int = 0; i < dateGrid.numChildren; i++) { 
      if (dateGrid.getChildAt(i) is IUITextField) { 
       var textField:UITextField = dateGrid.getChildAt(i) as UITextField; 
       for (var j:int = 0; j<highlightDate.length; j++) { 
        if (textField.text == highlightDate[j]) { 
         textField.textColor = highlightColor; 
        } 
       } 
      } 
        } 
Смежные вопросы