Apache flex Flex4:有没有一种简单的方法来扩展Spark按钮?

Apache flex Flex4:有没有一种简单的方法来扩展Spark按钮?,apache-flex,button,extend,flex-spark,Apache Flex,Button,Extend,Flex Spark,我创建了一个定制的Spark按钮,通过执行File>New>MXML皮肤并基于Spark.components.button。问题是,我需要向按钮组件添加一个额外的文本字段,并动态更改该文本…但是,当然,Spark按钮上无法识别该属性 是否有一种简单的方法将此字段添加到我的自定义按钮外观及其属性,以便对其进行寻址?如果没有,有没有一个简单的方法来采取我所做的,只是延长火花按钮?我似乎找不到任何不在ActionScript中全部写出来的例子来说明如何做到这一点。很高兴你这么问!这比你想象的要容易得

我创建了一个定制的Spark按钮,通过执行File>New>MXML皮肤并基于Spark.components.button。问题是,我需要向按钮组件添加一个额外的文本字段,并动态更改该文本…但是,当然,Spark按钮上无法识别该属性


是否有一种简单的方法将此字段添加到我的自定义按钮外观及其属性,以便对其进行寻址?如果没有,有没有一个简单的方法来采取我所做的,只是延长火花按钮?我似乎找不到任何不在ActionScript中全部写出来的例子来说明如何做到这一点。

很高兴你这么问!这比你想象的要容易得多,所以不要泄气!一旦掌握了诀窍,ActionScript就相当容易了

首先,让我们定义我们想要什么。在阅读您的问题后,我相信您希望使用如下按钮:

<local:MyCustomButton label="Hello" label2="World!"/>
因此,现在当您制作皮肤时,您应该包括类似原始标签的内容,只是使用不同的ID来反映您的新皮肤部分:

但是等等!我们的第二个标签应该显示什么文字??好的,我们需要添加另一个属性,您可以为按钮的每个单独实例设置该属性:

<?xml version="1.0" encoding="utf-8"?>
<s:Button 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[

            [SkinPart]
            public var secondLabelDisplay:spark.components.Label;


            private var _label2:String;

            public function get label2():String
            {
                return _label2;
            }

            public function set label2(value:String):void
            {
                _label2 = value;
            }


        ]]>
    </fx:Script>


</s:Button>


祝你好运

谢谢你如此彻底的回复。我真的很感激。
<?xml version="1.0" encoding="utf-8"?>
<s:Button 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[

            [SkinPart]
            public var secondLabelDisplay:spark.components.Label;


        ]]>
    </fx:Script>


</s:Button>
<?xml version="1.0" encoding="utf-8"?>
<s:Button 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[

            [SkinPart]
            public var secondLabelDisplay:spark.components.Label;


            private var _label2:String;

            public function get label2():String
            {
                return _label2;
            }

            public function set label2(value:String):void
            {
                _label2 = value;
            }


        ]]>
    </fx:Script>


</s:Button>
  <?xml version="1.0" encoding="utf-8"?>
    <s:Button 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[

                [SkinPart]
                public var secondLabelDisplay:spark.components.Label;


                private var _label2:String;
                private var label2Changed:Boolean;

                public function get label2():String
                {
                    return _label2;
                }

                public function set label2(value:String):void
                {
                    _label2 = value;
                    label2Changed = true;
                    invalidateProperties();
                }

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

                    if(label2Changed)
                    {
                        label2Changed = false;
                                            secondLabelDisplay.text = label2;
                    }

                }


            ]]>
        </fx:Script>


    </s:Button>
<fx:Script>
    <![CDATA[

        [SkinPart]
        public var secondLabelDisplay:spark.components.Label;


        private var _label2:String;
        private var label2Changed:Boolean;

        public function get label2():String
        {
            return _label2;
        }

        public function set label2(value:String):void
        {
            _label2 = value;
            label2Changed = true;
            invalidateProperties();
        }

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

            if(label2Changed)
            {
                label2Changed = false;
                                    secondLabelDisplay.text = label2;
            }

        }

        override protected function partAdded(partName:String, instance:Object):void
        {
            if(instance == secondLabelDisplay)
            {
                secondLabelDisplay.text = _label2;
            }

        }


    ]]>
</fx:Script>