在 ActionScript 3.5/Flex 中,如何将边框应用于用户单击的任何 UI 组件或容器?

Posted

技术标签:

【中文标题】在 ActionScript 3.5/Flex 中,如何将边框应用于用户单击的任何 UI 组件或容器?【英文标题】:In ActionScript 3.5/Flex, how do I apply a border to whatever UI Component or container the user clicks? 【发布时间】:2012-02-07 08:15:43 【问题描述】:

我正在开发一个项目,我想在根 DisplayObjectContainer 中添加一个单击侦听器,如果用户单击 UIComponent,它将为用户单击的任何内容添加一个红色边框。目前,我这样做的代码如下所示:

    private static var _root:DisplayObjectContainer;
    private static var labelStyle:CSSStyleDeclaration;

    public static function initialize(root:DisplayObjectContainer):void
    
        _root = root;

        labelStyle = new CSSStyleDeclaration();
        labelStyle.setStyle("borderColor", "red");
        labelStyle.setStyle("borderThickness", 4);
        labelStyle.setStyle("color", "red");
        labelStyle.setStyle("borderStyle", "solid");

        StyleManager.setStyleDeclaration(".mystyle", labelStyle, true);
        _root.addEventListener(MouseEvent.CLICK, highlightBorder, true, Infinity, true);
    

    private static function highlightBorder(event:MouseEvent):void
               
        event.stopPropagation();

        if(event.target is UIComponent)
        
            var tmp:UIComponent = event.target as UIComponent;
            tmp.styleDeclaration = labelStyle;
            tmp.invalidateProperties();
            tmp.invalidateDisplayList();
            tmp.validateNow();
        
    

此代码位于 .as 文件中,而不是 .mxml 中。

不幸的是,实际上什么也没发生。用户单击的 UI 组件仍然明显没有边框。我已经测试了 event.target 并且有理由确定它确实指向用户点击的 UI 组件;我还使用警报来确保 if 语句实际上完全执行。

有人知道为什么边界没有改变吗?

【问题讨论】:

【参考方案1】:

在 UIComponent 上使用setStyle 方法。所以不要使用tmp.styleDeclaration = labelStyle,而是执行tmp.setStyle("styleName", "mystyle") 之类的操作,或者跳过CSSStyleDeclaration 部分并直接在UIComponent 上执行tmp.setStyle("borderColor", "red") 等等。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UIComponent.html#setStyle

【讨论】:

解决了!非常感谢!

以上是关于在 ActionScript 3.5/Flex 中,如何将边框应用于用户单击的任何 UI 组件或容器?的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 在ActionScript中打开相机

ActionScript 3 在ActionScript 3中嵌入字体

为啥此代码在 ActionScript 面板中有效,而在 ActionScript 文件中无效?我该如何解决这个问题?

ActionScript 3 AS3:在ActionScript中使用E4X生成动态XML

测试对象是不是在 ActionScript 中定义

无法在 Actionscript 3 中跟踪