Spark TextInput验证的errorSkin

时间:2011-03-14 20:40:28

标签: flex validation skinning textinput

我可能正在服用疯狂的药片,但有没有人真正得到errorSkin功能?我没有做任何疯狂的事情,只是扩展TextInput(spark)并设置errorSkin属性。

我尝试使用SparkSkin创建皮肤,什么也没做。 我尝试使用ProgrammaticSkin创建皮肤,什么也没做。

TextInput始终为红色边框。我知道你可以设置errorColor和errorString,但我显然要做的不仅仅是改变边框的颜色。我正在使用Flex 4.1进行编译。

有什么想法吗?

执行力度:

<components:PromptedTextInput id="txt"
        width="200"
        horizontalCenter="0"
        verticalCenter="0"
        errorSkin="skins.TestSkin" />

public class PromptedTextInput extends TextInput
{

    public function PromptedTextInput()
    {
        super();
    }

}

错误皮肤:

<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Metadata>
    <![CDATA[

    [HostComponent("spark.components.TextInput")]

    ]]>
</fx:Metadata>

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

<!-- fill -->
<s:Rect id="background"
        left="1" right="1" top="1" bottom="1">
    <s:fill>
        <!--- Defines the background fill color. -->
        <s:SolidColor id="bgFill"
                color="#66CC66" />
    </s:fill>
</s:Rect>
</s:SparkSkin>

另一个错误皮肤尝试:

public class TestSkin extends ProgrammaticSkin
{
    public function TestSkin()
    {
        super();
    }

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth, unscaledHeight);
        graphics.clear();
        graphics.beginFill(0x33CC33);
        graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);
        graphics.endFill();
    }
}

2 个答案:

答案 0 :(得分:1)

您是否尝试根据\ Flex 4.1 \ frameworks \ projects \ spark \ src \ spark \ skins \ spark \ ErrorSkin.as中找到的ErrorSkin(而不是TextInput外观)创建外观?

答案 1 :(得分:1)

嗯,它不漂亮,但看起来有两个皮肤需要改变。 ErrorSkin和FocusSkin。好消息是你可以让它们变得一样。对于皮肤,只是为了测试,我完全复制了Adobe的ErrorSkin类。可悲的是,即使将颜色硬编码到皮肤中,我仍然可以看到一个红色的像素在边界的角落中穿过。如果我修复它,我会尝试更新它。谢谢大家。

<s:TextInput id="txt"
            width="200"
            focusSkin="skins.NewErrorSkin"
            horizontalCenter="0"
            verticalCenter="0"
            errorSkin="skins.NewErrorSkin" />

更新

听起来很愚蠢,但只是在ErrorSkin的processBitmap()函数中设置了errorColor样式。在这里,我将错误边界硬编码为0x99CC66

override protected function processBitmap():void
{
     // Apply the glow filter
     rect.x = rect.y = 0;
     rect.width = bitmap.bitmapData.width;
     rect.height = bitmap.bitmapData.height;

     target.setStyle("errorColor", 0x99cc66);
     glowFilter.color = 0x99cc66;

     bitmap.bitmapData.applyFilter(bitmap.bitmapData, rect, filterPt, glowFilter);
}