2013-08-27 4 views
0

Мне было интересно, если вы каким-то образом скрываете определенную кнопку в ButtonBar. В соответствии с этим ответом (и ссылкой, представленной во втором ответе) Disable individual buttons in a buttonbar Мне нужно использовать метод getChildAt ButtonBar, но когда я делаю это, я получаю пользовательский объект скина, а не объект Button. Мне было интересно, как я могу получить доступ к объекту Button.Скрыть кнопку в ButtonBar

Спасибо!

+1

Вы используете MX ButtonBar или искру ButtonBar? Если Spark, ответ, с которым вы связаны, не цитируется. Однако концепция та же. Найдите кнопку и переключите ее видимость. Или, возможно, удалите эту кнопку из DataProvider ButtonBar, не переключая индивидуальную видимость на кнопку. – JeffryHouser

+1

О, я не считал это, ты прав, это Искра. Мне нужно переключить видимость, так как удаление кнопки помешает индексу, на который полагается куча других компонентов (он довольно тесно связан :() – iman453

ответ

2

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

С искрой ButtonBar, вы можете получить доступ к части кожи напрямую, чтобы получить доступ на кнопку. Концептуально что-то вроде этого:

var button : Button = mySparkButtonBarInstance.dataGroup.getElementAt(SomeIndex); 
button.visible = false; // or true 
button.includeInLayout = false; // or true 

Это не будет работать, если ваш ButtonBar может использовать виртуальные макетах и ​​требует прокрутки.


Edit: Вот рабочий код демонстрирует эту технику:

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

    <fx:Script> 
     <![CDATA[ 
      import mx.core.IVisualElement; 
      protected function button1_clickHandler(event:MouseEvent):void 
      { 
       trace(buttonBar.dataGroup.getElementAt(0)); 
       var button :IVisualElement = buttonBar.dataGroup.getElementAt(0); 
       button.visible = false; // or true 
       button.includeInLayout = false; // or true   } 
      } 
     ]]> 
    </fx:Script> 

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

    <s:layout> 
     <s:VerticalLayout paddingLeft="20" paddingTop="20"/> 
    </s:layout> 

    <s:ButtonBar id="buttonBar"> 
     <mx:ArrayCollection> 
      <fx:String>Flash</fx:String> 
      <fx:String>Director</fx:String> 
      <fx:String>Dreamweaver</fx:String> 
      <fx:String>ColdFusion</fx:String> 
     </mx:ArrayCollection> 
    </s:ButtonBar> 

    <s:Button label="Remove" click="button1_clickHandler(event)" /> 

</s:WindowedApplication> 
+0

Я тестировал это сегодня и сталкивался с некоторыми проблемами: любые идеи, почему .dataGroup.getElementAt (SomeIndex) всегда возвращает null, даже когда numElements (и getItemIndicesInView) возвращает правильную сумму? Удаление элемента из dataProvider работает, но изменение .visible или почти ничего похожего ничего не делает. –

+0

Если бы мне пришлось угадать, это проблема с конверсией. Вы пытались использовать его как кнопку? mySparkButtonBarInstance.dataGroup.getElementAt (SomeIndex) как Button' – JeffryHouser

+0

Да. Всегда null. DataProvider был массивом ArrayCollection, в который я добавил кнопки с символом 'for (var i: int {0} = 0; i <10; Извините, если есть опечатки, я m не на том ПК сейчас) –

Смежные вопросы