Frage Zugreifen auf die benutzerdefinierte Eigenschaft von hostComponent beim Enthäuten - Flex 4.5, SDK 4.5


Mit SDK 4.1 konnte ich über eine benutzerdefinierte Skin auf benutzerdefinierte Eigenschaften einer benutzerdefinierten Schaltflächenkomponente zugreifen. Das Projekt, an dem ich gerade arbeite, benötigt SDK 4.5 und ich kann nicht auf die Eigenschaften zugreifen. Hier ist ein Beispiel:

Benutzerdefinierte Schaltflächenkomponente

<?xml version="1.0" encoding="utf-8"?>
<s:ButtonBase xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx"
          skinClass="components.skins.ButtonIcon_Skin"
          >
    <fx:Declarations>
        <fx:String id="iconCustom" />
    </fx:Declarations>
</s:ButtonBase>

Benutzerdefinierte Schaltflächenleiste

<?xml version="1.0" encoding="utf-8"?>
<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
             minWidth="21" minHeight="21" 
             alpha.disabled="0.5">
    <fx:Metadata>[HostComponent("components.ButtonIcon")]</fx:Metadata>

...

    <s:Label id="test" {hostComponent.iconCustom}" 
             horizontalCenter="0" bottom="10" />

</s:SparkButtonSkin>

Der Code-Hinweis zeigt an hostComponent.iconCustom aber dann gibt der Fehler:

Access of possibly undefined property iconCustom through a reference with static type spark.components.supportClasses:ButtonBase. ButtonIcon_Skin.mxml

5
2018-06-07 16:10


Ursprung


Antworten:


Ersetzen Sie einfach SparkButtonSkin durch eine normale Skin und Sie werden es schaffen:

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Metadata>
        [HostComponent("components.ButtonIcon")]
    </fx:Metadata>

    <s:states>
        <s:State name="disabled" />
        <s:State name="down" />
        <s:State name="over" />
        <s:State name="up" />
    </s:states>

    <s:Label text="test {hostComponent.iconCustom}" 
             horizontalCenter="0" bottom="10" />

</s:Skin>

8
2018-06-07 16:41



Eine andere Option, wenn Sie SparkButtonSkin verwenden möchten, nur zu Ihrer tatsächlichen hostComponent

(hostComponent as ButtonIcon).iconCustom

oder im Zusammenhang:

Benutzerdefinierte Schaltflächenleiste

<?xml version="1.0" encoding="utf-8"?>
<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
             minWidth="21" minHeight="21" 
             alpha.disabled="0.5">
    <fx:Metadata>[HostComponent("components.ButtonIcon")]</fx:Metadata>

...

    <s:Label id="{(hostComponent as ButtonIcon).iconCustom}" 
             horizontalCenter="0" bottom="10" />

</s:SparkButtonSkin>

2
2017-07-26 00:42