0

「エラー」状態を定義するカスタムTextInputコンポーネントを作成しています。errorStringプロパティの長さが0より大きい場合に状態を「エラー」に変更するようにTextInputクラスを拡張しました。スキンクラスでは、「エラー」状態を定義し、サイズと位置を検出するロジックを追加しました。エラーアイコン。ただし、このコードを同時に使用すると、ビットマップイメージタグで「includeIn」プロパティを使用すると、デザインビューエラーが発生します。A)「includeIn」プロパティが設定されていないコードのみを含めるか、B)アイコンのサイズと位置を設定するコードを含めず、「includeIn」プロパティのみを使用する場合は、機能します。「includeIn」の両方を使用したときにデザインビューの問題を引き起こす可能性のあるアイデア

TextInputクラス:

        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();
            }

        }
     }

TextInputスキンファイル:

            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>
4

1 に答える 1

1

Flex 4では、コンポーネントは、その状態がアクティブ化されたときにのみインスタンス化されます。したがって、スキンが最初にロードされるとき、errorIconはnull参照です。そのインスタンス化は、エラー状態がアクティブになるまで延期されます。すぐにインスタンス化するには、itemCreationPolicy="immediate"プロパティを設定します。

<s:BitmapImage id="errorIcon" 
               source="../images/error.png" 
               itemCreationPolicy="immediate" 
/>
于 2010-04-26T23:31:59.183 に答える