Как изменить стиль Adobe Flex Accordion, чтобы включить кнопку в каждый заголовок холста?

Вот пример кода для моего аккордеона:

<mx:Accordion x="15" y="15" width="230" height="599" styleName="myAccordion">
    <mx:Canvas id="pnlSpotlight" label="SPOTLIGHT" height="100%" width="100%" horizontalScrollPolicy="off">
        <mx:VBox width="100%" height="80%" paddingTop="2" paddingBottom="1"  verticalGap="1">
            <mx:Repeater id="rptrSpotlight" dataProvider="{aSpotlight}">            
                <sm:SmallCourseListItem 
                    viewClick="PlayFile(event.currentTarget.getRepeaterItem().fileID);"
                    Description="{rptrSpotlight.currentItem.fileDescription}"
                    FileID = "{rptrSpotlight.currentItem.fileID}"   
                    detailsClick="{detailsView.SetFile(event.currentTarget.getRepeaterItem().fileID,this)}" 
                    Title="{rptrSpotlight.currentItem.fileTitle}"
                    FileIcon="{iconLibrary.getIcon(rptrSpotlight.currentItem.fileExtension)}" />
            </mx:Repeater>
        </mx:VBox>
    </mx:Canvas>
</mx:Accordion>

Я хотел бы включить кнопку в каждом заголовке, например, так:

желаемое предупреждение "onclick =" ('xss')

14.08.2008 20:25:07
2 ОТВЕТА

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

<mx:Accordion>
    <mx:headerRenderer>
        <mx:Component>
            <AccordionHeader xmlns="mx.containers.accordionClasses.*">
                <mx:Script>
                <![CDATA[

                import mx.controls.Button;


                private var extraButton : Button;


                override protected function createChildren( ) : void {
                    super.createChildren();

                    if ( extraButton == null ) {
                        extraButton = new Button();

                        addChild(extraButton);
                    }
                }

                override protected function updateDisplayList( unscaledWidth : Number, unscaledHeight : Number ) : void {
                    super.updateDisplayList(unscaledWidth, unscaledHeight);

                    extraButton.setActualSize(unscaledHeight - 6, unscaledHeight - 6);
                    extraButton.move(unscaledWidth - extraButton.width - 3, (unscaledHeight - extraButton.height)/2);
                }

                ]]>
                </mx:Script>
            </AccordionHeader>
        </mx:Component>
    </mx:headerRenderer>

    <mx:HBox label="1"><Label text="Text 1"/></HBox>
    <mx:HBox label="1"><Label text="Text 2"/></HBox>
    <mx:HBox label="1"><Label text="Text 3"/></HBox>
</mx:Accordion>
1
15.08.2008 14:00:53
РЕШЕНИЕ

Спасибо, у меня все получилось, используя FlexLib CanvasButtonAccordionHeader.

2
15.08.2008 14:47:51
Привет, Шон. Не могли бы вы поделиться исходным кодом использования CanvasButtonAccordionHeader от FlexLib в вашем приложении. У меня возникли небольшие проблемы с поиском пути, и документация на странице тоже не сильно помогает.
Hafiz Gee 10.04.2010 08:00:43