我希望像每个按钮之间有一些间距的单个按钮。它应该像普通的标签导航标签一样运行。
所以,我采用了一个Spark ButtonBar组件并对ButtonBarSkin进行了更改,就像我上面所说的那样。 ButtonBar的默认行为是ButtonBar控件中只有一个按钮可以处于选中状态。这意味着当您在ButtonBar控件中选择一个按钮时,该按钮将保持选定状态,直到您选择其他按钮。
但是,如果我点击已经选择的按钮,选择就会消失。我不需要这样的行为。我希望按钮处于选中状态,即使我再次单击它,就像在标签栏控件中一样。
当我探索buttonbarskin时,我知道buttonbarbutton用于定义按钮栏控件的自定义项呈示器。 ButtonBarButton组件具有“ allowDeselection ”属性,默认情况下为true,这意味着可以通过再次单击取消选择按钮栏中的选定按钮。如果设置为false,则用户必须选择其他按钮以取消选择当前选定的按钮。
因此,在ButtonBarSkin中声明buttonbarbutton组件时,我将 allowDeselection 属性设置为false。即使这样,该值也被设置为true。在调试代码时,我发现奇怪的是,声明的值,即 false 首先被设置,并且对于按钮栏的所有第一个按钮,中间按钮和最后一个按钮,它被设置为true。我不知道属性是如何设置为true的,即使我在buttonbarskin中定义时将其设置为false。
代码段如下:
<s:ButtonBar skinClass="skin.ButtonBarSkinCopy">
<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>
<?xml version="1.0" encoding="utf-8"?>
<fx:Metadata>
<![CDATA[
/**
* @copy spark.skins.spark.ApplicationSkin#hostComponent
*/
[HostComponent("spark.components.ButtonBar")]
]]>
</fx:Metadata>
<s:states>
<s:State name="normal" />
<s:State name="disabled" />
</s:states>
<fx:Declarations>
<!---
@copy spark.components.ButtonBar#firstButton
@default spark.skins.spark.ButtonBarFirstButtonSkin
@see spark.skins.spark.ButtonBarFirstButtonSkin
-->
<fx:Component id="firstButton">
<s:ButtonBarButton allowDeselection="false" skinClass="skin.CustomButtonBarButtonSkin" />
</fx:Component>
<!---
@copy spark.components.ButtonBar#middleButton
@default spark.skins.spark.ButtonBarMiddleButtonSkin
@see spark.skins.spark.ButtonBarMiddleButtonSkin
-->
<fx:Component id="middleButton" >
<s:ButtonBarButton allowDeselection="false" skinClass="skin.CustomButtonBarButtonSkin" />
</fx:Component>
<!---
@copy spark.components.ButtonBar#lastButton
@default spark.skins.spark.ButtonBarLastButtonSkin
@see spark.skins.spark.ButtonBarLastButtonSkin
-->
<fx:Component id="lastButton" >
<s:ButtonBarButton allowDeselection="false" skinClass="skin.CustomButtonBarButtonSkin"/>
</fx:Component>
</fx:Declarations>
<!--- @copy spark.components.SkinnableDataContainer#dataGroup -->
<s:DataGroup id="dataGroup" width="100%" height="100%">
<s:layout>
<s:ButtonBarHorizontalLayout gap="2"/>
</s:layout>
</s:DataGroup>
CustomButtonBarButtonSkin.mxml只是ButtonBarButtonSkin的一个副本。 ButtonBarButtonSkin.mxml中没有进行任何更改。
请说,请分享您的观点。
答案 0 :(得分:1)
您需要将ButtonBar
组件的requireSelection属性设置为true
。如果requireSelection
为真,则无法取消选中按钮栏上的按钮。来自文档:
如果为true,则必须始终在控件中选择数据项。如果值为true,则selectedIndex属性始终设置为介于0和(dataProvider.length - 1)之间的值。
对于大多数子类,默认值为false,但TabBar除外。在这种情况下,默认值为true。
默认值为false。
您可以在this example中看到它正常工作(向下滚动以查看演示)。