设置按钮栏按钮组件'allowDeselction'属性时出现问题



我想有标签像单个按钮,每个按钮之间有一些间距。它应该像普通的标签导航器标签一样。

因此,我使用了一个spark ButtonBar组件,并对ButtonBarSkin进行了更改,使其看起来像我上面所说的那样。按钮栏的默认行为是:在按钮栏控件中,只有一个按钮可以处于选中状态。这意味着当你在ButtonBar控件中选择一个按钮时,该按钮将保持在选定状态,直到你选择另一个按钮。

但是,如果我点击已经选择的按钮,选择就会消失。我不需要这样的行为。我希望按钮处于选中状态,即使我再次点击它,就像在标签栏控件中一样。

当我探索buttonbarskin时,我知道buttonbarbutton是用来定义按钮栏控件的自定义项呈现器的。ButtonBarButton组件有一个" allowdesselection "属性,默认为true,这意味着按钮栏中被选中的按钮可以通过再次点击来取消选中。如果设置为false,用户必须选择一个不同的按钮来取消当前选择的按钮。

因此,当在ButtonBarSkin中声明buttonbarbutton组件时,我将 allowdesselection 属性设置为false。即使这样,该值也被设置为true。在调试代码时,我发现奇怪的是,声明的值即,false首先被设置,然后它被设置为true,用于按钮栏的所有firstbutton, middlebutton和lastbutton。我不知道属性是如何被设置为true的,即使我在buttonbarskin中定义时将其设置为false。

的代码片段如下:

ButtonBar控制
   <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>

ButtonBarSkinCopy.mxml

<?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中没有做任何更改。

请分享你的观点

需要将ButtonBar组件的requiresselection属性设置为true。当requireSelection为true时,按钮栏上的按钮不能取消选中。来自文档:

如果为true,则必须始终在控件中选择数据项。如果该值为true,则始终将selectedIndex属性设置为介于0和(dataProvider)之间的值。长度- 1).

大多数子类的默认值是false,除了TabBar。在这种情况下,默认为true。

默认为false

您可以在这个示例中看到它的工作(向下滚动以查看演示)。

相关内容

  • 没有找到相关文章

最新更新