2013-08-28 3 views
2

то, что я пытаюсь сделать, это настроить внешний вид полосы прокрутки ТОЛЬКО при отображении внутри конкретного компонента. Я не хочу менять внешний вид всех остальных полос прокрутки моего приложения.Flex - настройка полосы прокрутки, используемой внутри компонента, с помощью CSS

У меня есть панель, внутри этой панели есть VBox, и полоса прокрутки появляется внутри этого vbox, и я хочу стилизовать только эту полосу прокрутки с помощью CSS.

Я попытался добавить что-то вроде этого в моем компоненте (тест только для удаления стрелок вверх и вниз от скроллера):

<fx:Style> 
    @namespace s "library://ns.adobe.com/flex/spark"; 

    s|Scroller 
    { 
    up-arrow-skin: ClassReference("undefined"); 
    down-arrow-skin: ClassReference("undefined"); 
    } 

</fx:Style> 

результатом является предупреждением, что говорит:

CSS type selectors are not supported in components: 'spark.components.Scroller' 

Я искал и узнал, что я должен использовать селекторы классов вместо селекторов типов внутри компонента, но я не хочу создавать пользовательские полосы прокрутки (как я должен использовать это?).

EDIT: Я добавляю пример моего кода с проверкой селектора класса CSS:

<fx:Style> 
    @namespace s "library://ns.adobe.com/flex/spark"; 
    @namespace mx "library://ns.adobe.com/flex/mx"; 

    .noArrowsScroller 
    { 
    up-arrow-skin: ClassReference("undefined"); 
    down-arrow-skin: ClassReference("undefined"); 
    } 


</fx:Style> 

<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<mx:VBox width="100%" height="100%" paddingBottom="20" paddingLeft="20" paddingRight="20" paddingTop="20" 
     horizontalAlign="center" verticalAlign="middle"> 


    <s:BorderContainer borderWeight="1" width="100%" height="100%" borderColor="0x79A8BD"> 
     <mx:VBox width="100%" height="100%" id="generalVBox" horizontalAlign="center" 
       minHeight="0" horizontalScrollPolicy="off"> 

     </mx:VBox> 
    </s:BorderContainer> 
</mx:VBox> 

VBox «generalVBox» является тот, в котором я хочу, чтобы мои подгонять полосы прокрутки появляться.

В этом vBox добавляются во время выполнения несколько компонентов, которые могут вызвать появление полосы прокрутки.

Как я должен применить свой селектор классов «noArrowsScroller»?

EDIT 2: После комментариев Sunil я попробовал поместить компонент Scroller, завершающий контейнер VGroup, и используя селектор классов, называемый noArrowsScrollbar, но стиль полосы прокрутки остается тем же. Я пробовал установить цвет также в моем селекторе классов, а свойство THAT работает, возможно, я использую неправильные свойства CSS?

<?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" width="100%"  height="100%" 
      creationComplete="application1_creationCompleteHandler(event)"> 

<fx:Script> 
    <![CDATA[ 
     import mx.controls.Label; 
     import mx.controls.LinkButton; 
     import mx.events.FlexEvent; 



     protected function application1_creationCompleteHandler(event:FlexEvent):void 
     { 
      if(v != null) 
      { 
       for(var i:int = 0; i < 100; i++) 
       { 
        var lbl:Label = new Label(); 
        lbl.text = String(i); 

        v2.addElement(lbl); 
       } 
      } 
     } 

    ]]> 
</fx:Script> 

<fx:Style> 
    @namespace s "library://ns.adobe.com/flex/spark"; 
    @namespace mx "library://ns.adobe.com/flex/mx"; 

    .noArrowsScroller 
    { 
     down-arrow-skin: ClassReference("undefined"); 
     up-arrow-skin: ClassReference("undefined"); 
     color: red; 
    } 


</fx:Style> 

<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 



<s:Panel width="50%" height="50%"> 
    <s:Scroller styleName="noArrowsScroller" 
       focusEnabled="false" 
       hasFocusableChildren="true" 

       height="100%" 
       horizontalCenter="0" verticalCenter="0"> 
     <s:VGroup width="100%" height="100%" id="v2" minHeight="0"> 

     </s:VGroup> 
    </s:Scroller> 
</s:Panel> 

Благодаря

+0

Я не понять, почему вы не можете использовать селектор классов. Вы можете определить его везде и выборочно применять его везде, где хотите. –

+0

Сунил, спасибо за ваш комментарий. Я добавил фрагмент кода, чтобы лучше объяснить мои трудности. – frankieta

ответ

1

селекторы типа CSS не допускаются в компонентах .. Все, что вы можете сделать, это: селектор использование класса вместо или Попробуйте положить его в CSS корневого уровня в MXML.

+0

Спасибо, что ответили. Да, но если я поместил этот селектор типа в корневой уровень моего приложения mxml, этот стиль будет применяться ко всем экземплярам полос прокрутки в моем приложении? Я не хочу думать о поведении. – frankieta

+0

сделал css правильно? Значит, он показывает предупреждение только или css не работает? Есть возможность обоих. – Ashwani

+0

Спасибо. Я попытался переместить селектор типа CSS в моем верхнем файле MXML, но он не сработал, каждая полоса прокрутки выглядит без изменений. Предупреждение (селекторы типов CSS не поддерживаются в компонентах: «spark.components.Scroller») также отображается на моем верхнем компоненте mxml. Возможно, я делаю что-то неправильно, так как это первый раз, когда я пытаюсь использовать css в flex. В любом случае, возможно, мое первоначальное намерение (одно объяснение в вопросе) невозможно. – frankieta

-1

Теперь, когда вы используете Scroller и VGroup, вам просто нужно исправить синтаксис, который вы используете на отключенное/удалить элементы:

Попробуйте это:

.noArrowsScroller 
{ 
     down-arrow-skin: ClassReference(null); 
     up-arrow-skin: ClassReference(null); 
} 
Смежные вопросы