在 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 文件中无效?我该如何解决这个问题?