过滤器是不是会破坏 Flex 4.5 皮肤中的 colorizeExclusions,如果是,是不是有解决方法?

Posted

技术标签:

【中文标题】过滤器是不是会破坏 Flex 4.5 皮肤中的 colorizeExclusions,如果是,是不是有解决方法?【英文标题】:Do filters break colorizeExclusions in Flex 4.5 skins, and if so, is there a workaround?过滤器是否会破坏 Flex 4.5 皮肤中的 colorizeExclusions,如果是,是否有解决方法? 【发布时间】:2011-10-06 13:28:20 【问题描述】:

我在 Flex 4.5 中创建了一个 MXML 火花按钮皮肤,它似乎工作得很好,除了在关闭状态下,它忽略了我的 colorizeExclusions 数组(它目前正在保护文本标签和按钮上突出显示)。向上状态和向下状态之间的唯一区别是我在向下状态应用了内部阴影。

*** 不允许我发布图片,因为我是新用户,所以我在其他地方发布了一些:

Up State

Down State

看到第二张图片中的高亮和文本是如何用蓝色着色的吗?这完全是错误

如果我对这个内部阴影没有设置状态限制,我会看到同样的问题:我的 colorizeExclusions 被忽略,所以它似乎与状态或任何特定于状态的 CSS(没有t 任何一个,在这种情况下,无论如何)。

这是按钮皮肤代码:

<?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"
               xmlns:fxg="assets.fxg.*"
               minWidth="18" minHeight="18"
               alpha.disabled="0.5">

<fx:Metadata>
    <![CDATA[ 
    /** 
     * @copy spark.skins.spark.ApplicationSkin#hostComponent
     */
    [HostComponent("spark.components.Button")]
    ]]>
</fx:Metadata>

<fx:Script fb:purpose="styling">
    <![CDATA[         
        import spark.components.Group;
        /* Define the skin elements that should not be colorized. 
        For button, the graphics are colorized but the label is not. */
        static private const exclusions:Array = ["labelDisplay", "highlight"];

        /** 
         * @private
         */     
        override public function get colorizeExclusions():Array return exclusions;

        /**
         * @private
         */
        override protected function initializationComplete():void
        
            useChromeColor = true;
            super.initializationComplete();
          


    ]]>        
</fx:Script>

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

<s:Group left="0" right="0" top="0" bottom="0">
    <!-- Background --> 
    <s:Group id="background" left="0" right="0" top="0" bottom="0">
        <fxg:GlassButtonBack excludeFrom="over" left="0" right="0" top="0" bottom="0"/>
        <fxg:GlassButtonBackBright includeIn="over" left="0" right="0" top="0" bottom="0"/>
    </s:Group>


    <!-- layer 8: text -->
    <!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay  -->

    <s:Label id="labelDisplay" left="16" right="16" top="8" bottom="8"
             fontWeight="bold" horizontalCenter="0" maxDisplayedLines="1" textAlign="center"
             verticalAlign="middle" verticalCenter="1"/>

    <s:Rect id="highlight" left="3" right="3" top="3"  radiusX="6" radiusY="6">
        <s:fill>
            <s:LinearGradient rotation="90">
                <s:entries>
                    <s:GradientEntry ratio="0" alpha="0.9" color="#FFFFFF" />
                    <s:GradientEntry ratio="1" alpha="0" color="#FFFFFF" />
                </s:entries>
            </s:LinearGradient>
        </s:fill>
    </s:Rect>
    <s:filters>
        <s:DropShadowFilter includeIn="down" inner="true" color="#000000" blurX="10" blurY="10" angle="90"/>

    </s:filters>

</s:Group>

有人知道这里到底发生了什么吗?这是一个 Flex 错误吗?有解决方法吗?我做了什么蠢事吗?我真的很茫然,在这里。

【问题讨论】:

【参考方案1】:

快速概览:

static private const exclusions:Array = ["labelDisplay", "highlight"];

我认为这不应该是静态的,请尝试删除它,看看会发生什么。

【讨论】:

它在 spark.skins.spark.ButtonSkin 中是静态的。另外,我尝试删除静电,只是为了它,但它并没有解决问题。 问题出在您的背景区域。删除/评论该部分,只要我可以测试,问题就会消失。可以发fxp吗? 内特,当我注释掉那个区域时,恐怕问题并没有消失。所以,这似乎与我的 fxgs 无关。

以上是关于过滤器是不是会破坏 Flex 4.5 皮肤中的 colorizeExclusions,如果是,是不是有解决方法?的主要内容,如果未能解决你的问题,请参考以下文章

Flex 中的按钮皮肤问题

具有默认移动皮肤的 Flex TextInput 会自动重新关注标注关闭

Flex 自定义皮肤不调出 IOS 软键盘

TabNavigator 无法处理 Flex 4.5 中的禁用子级

使用flex-parent会破坏单项Flex布局

Flex 修改控件皮肤时,想给checkbox添加个背景图片,路径正确不知道为什么还报无法解析图片的问题