1

如标题所述,更改 Flex ToggleButtonBar 上的 labelField 会导致所有样式消失。只有在再次单击按钮后才会重新出现。有人可以提供修复吗?

注意我使用的是 Flex 3.6。您可以使用下面的代码查看行为。单击任一按钮以更改标签字段,并且在栏中,所选按钮的样式消失:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
            layout="vertical">

<mx:Style>

    .myStyle 
    {   
        buttonStyleName: "tabStyle";
        selectedButtonTextStyleName: "tabTextSelected";
    }

    .tabStyle 
    {   
        color: #000000;
    }

    .tabTextSelected
    {
        color: #FF0000;
    }   

</mx:Style>

<mx:ToggleButtonBar id="myToggleButtonBar" styleName="myStyle"
                    labelField="title0">

    <mx:dataProvider>
        <mx:Object title0="Apple" title1="Pomme" />
        <mx:Object title0="Cherry" title1="Cerise" /> 
    </mx:dataProvider>

</mx:ToggleButtonBar>

<mx:Button label="title0" click="{myToggleButtonBar.labelField = 'title0' }" /> 
<mx:Button label="title1" click="{myToggleButtonBar.labelField = 'title1' }" /> 

</mx:Application>
4

1 回答 1

0

我相信这里的问题不是样式丢失了,而是当您更改时labelField正在ToggleButtonBar重置它的selectedIndex属性(重置选定的选项卡)。dataProvider当您更改选项卡的 之类的东西(或影响标签如何从 中提取的东西)时,这似乎是一件公平的事情dataProvider

解决方案:在更改之前labelField,获取selectedIndex并重新设置它ToggleButtonBar

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                layout="vertical">

    <mx:Style>

        .myStyle 
        {   
            buttonStyleName: "tabStyle";
            selectedButtonTextStyleName: "tabTextSelected";
        }

        .tabStyle 
        {   
            color: #000000;
        }

        .tabTextSelected
        {
            color: #FF0000;
        }

    </mx:Style>
    <mx:Script>
        <![CDATA[
            private function toggleLabelField():void
            {
                var currentLabelField:String = myToggleButtonBar.labelField;
                var currentTab:int = myToggleButtonBar.selectedIndex;
                trace("selectedIndex before changing labelField: " + currentTab);
                var newLabelField:String = currentLabelField == 'title0' ? 'title1' : 'title0';
                myToggleButtonBar.labelField = newLabelField;
                trace("selectedIndex after changing labelField: " + myToggleButtonBar.selectedIndex);
                myToggleButtonBar.selectedIndex = currentTab;
            }
        ]]>
    </mx:Script>

    <mx:ToggleButtonBar id="myToggleButtonBar" styleName="myStyle"
                        labelField="title0">

        <mx:dataProvider>
            <mx:Object title0="Apple" title1="Pomme" />
            <mx:Object title0="Cherry" title1="Cerise" /> 
        </mx:dataProvider>

    </mx:ToggleButtonBar>

    <mx:Button label="title0" click="{myToggleButtonBar.labelField = 'title0' }" /> 
    <mx:Button label="title1" click="{myToggleButtonBar.labelField = 'title1' }" />
    <mx:Button label="toggle it" click="toggleLabelField()" />

</mx:Application>
于 2013-06-20T03:11:20.227 回答