Скрыть кнопку в панели кнопок
Мне было интересно, есть ли способ скрыть определенную кнопку в панели кнопок. В соответствии с этим ответом (и ссылкой, приведенной во втором ответе) Отключение отдельных кнопок на панели кнопок Мне нужно использовать метод getChildAt для ButtonBar, но когда я это делаю, я получаю пользовательский объект скина, а не объект Button. Мне было интересно, как я могу получить доступ к объекту Button.
Спасибо!
1 ответ
При условии, что все кнопки на панели кнопок будут отображаться одновременно, и вам не понадобятся полосы прокрутки...
С помощью Spark ButtonBar вы можете напрямую получить доступ к части скина, чтобы получить доступ к кнопке. Концептуально что-то вроде этого:
var button : Button = mySparkButtonBarInstance.dataGroup.getElementAt(SomeIndex);
button.visible = false; // or true
button.includeInLayout = false; // or true
Это не будет работать, если ваш ButtonBar может использовать виртуальные макеты и требует прокрутки.
Изменить: Вот рабочий код, демонстрирующий эту технику:
<?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>