Apache flex Flash Builder 4“;包括;属性导致设计视图错误

Apache flex Flash Builder 4“;包括;属性导致设计视图错误,apache-flex,flex4,flash-builder,states,Apache Flex,Flex4,Flash Builder,States,我正在创建一个自定义TextInput组件,它将定义一个“错误”状态。我扩展了TextInput类,以便在errorString属性的长度大于0时将状态更改为“error”。在skin类中,我定义了一个“error”状态,并添加了一些逻辑来检测错误图标的大小和位置。但是,如果在位图图像标记中使用“includeIn”属性的同时使用此代码,则会出现设计视图错误。如果我A)只包含没有设置“includeIn”属性的代码,它就工作了;或者B)不包含设置图标大小和位置的代码,只使用“includeIn”

我正在创建一个自定义TextInput组件,它将定义一个“错误”状态。我扩展了TextInput类,以便在errorString属性的长度大于0时将状态更改为“error”。在skin类中,我定义了一个“error”状态,并添加了一些逻辑来检测错误图标的大小和位置。但是,如果在位图图像标记中使用“includeIn”属性的同时使用此代码,则会出现设计视图错误。如果我A)只包含没有设置“includeIn”属性的代码,它就工作了;或者B)不包含设置图标大小和位置的代码,只使用“includeIn”属性,它就工作了。当我同时使用“includeIn”属性和图标大小/位置代码时,有什么想法会导致设计视图问题吗

文本输入类:

        package classes {

        import spark.components.TextInput;

        public class TextInput extends spark.components.TextInput {

            [SkinState("error")];

            public function TextInput() {
                super();    
            }

            override public function set errorString( value:String ):void {
                super.errorString = value;
                invalidateSkinState();
            }

            override protected function getCurrentSkinState():String {

                if (errorString.length>0) {
                    return "error";
                }

                return super.getCurrentSkinState();
            }

        }
     }
文本输入皮肤文件:

            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
            {
                //THIS IS THE CODE THAT SEEMS TO BE CAUSING THE PROBLEM


                if(getStyle("iconSize") == "large") {
                    errorIcon.right = -12;
                    errorIcon.source = new errorIconLg();
                } else {
                    errorIcon.right = -5;
                    errorIcon.source = new errorIconSm();
                }


                super.updateDisplayList(unscaledWidth, unscaledHeight);
            }
        </fx:Script>

        <s:states>
            <s:State name="normal"/>
            <s:State name="disabled"/>
            <s:State name="error"/>
        </s:states>



        //If I remove the problem code above or if I take out the includeIn 
        //property here, it works

        <s:BitmapImage id="errorIcon" verticalCenter="0" includeIn="error" />


    </s:SparkSkin>
覆盖受保护的函数updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):无效
{
//这就是导致问题的代码
如果(getStyle(“iconSize”)=“大”){
errorIcon.right=-12;
errorIcon.source=新的ErrorIconl();
}否则{
errorIcon.right=-5;
errorIcon.source=新的errorIconSm();
}
super.updateDisplayList(unscaledWidth、unscaledHeight);
}
//如果我删除了上面的问题代码,或者如果我取出了includeIn
//在这里,它起作用了

在Flex4中,组件只有在其处于激活状态时才会实例化。因此,当皮肤第一次加载时,errorIcon是一个空引用。它的实例化被延迟,直到错误状态变为活动状态。为了立即实例化它,您对其设置了itemCreationPolicy=“immediate”属性

<s:BitmapImage id="errorIcon" 
               source="../images/error.png" 
               itemCreationPolicy="immediate" 
/>