如何在AS3中更改DragManager拒绝符号?

时间:2011-10-20 14:57:46

标签: actionscript-3 flex drag-and-drop

我正在第一次使用flex4 / as3中的拖放功能。我使用DragManager类,现在基本的拖放工作。但是,我如何更改当我将对象拖到我无法丢弃的区域时显示的小红色“拒绝光标”?

我可以在样式规范中找到“rejectCursor”:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/DragManager.html#styleSummary

但我不知道如何在AS3中设置。我是否必须使用CSS,如果是的话,你能给我一个简单的例子吗?会非常有帮助的!感谢。

2 个答案:

答案 0 :(得分:2)

您需要使用<fx:Style>标记来声明全局样式:

<fx:Style>
    @namespace s "library://ns.adobe.com/flex/spark";
    @namespace mx "library://ns.adobe.com/flex/mx";

    mx|DragManager {
        rejectCursor: Embed('path/to/icon.pngORswf');
    }

</fx:Style>

编辑:要从AS3类而不是MXML执行此操作,您可以使用:

import mx.core.FlexGlobals;
import mx.styles.IStyleManager2;
import mx.styles.CSSStyleDeclaration;

[Embed('path/to/icon.pngORswf')]
private var rejectCursor:Class;

var mgr:IStyleManager2 = FlexGlobals.topLevelApplication.styleManager;
var selector:String = "mx.managers.DragManager";
var decl:CSSStyleDeclaration = mgr.getStyleDeclaration(selector);
if (!decl)
    decl = new CSSStyleDeclaration(selector);
decl.setStyle("rejectCursor", rejectCursor);
mgr.setStyleDeclaration(selector, decl, false);

答案 1 :(得分:1)

通常在AS3中,您可以在Flex组件上设置样式,如下所示:

UIComp.setStyle('styleName',newValue);  

但是,由于DragManager不扩展UIComponent,因此setStyle方法不存在。从这里开始,我猜了一下。

如果你深入研究代码;你会找到DragProxy类和showFeedback方法,它有一个像这样的段:

var styleSheet:CSSStyleDeclaration = styleManager.getMergedStyleDeclaration("mx.managers.DragManager");
newCursorClass = styleSheet.getStyle("rejectCursor");

因此,您可以尝试在DragProxy的实例上设置该样式;但是您需要访问DragProxy实例。看起来你需要使用mx_internal来做那个:

import mx.core.mx_internal;
use mx_internal

然后你可以这样做:

var myDragProxy : DragProxy = DragManager.dragProxy()
dragProxy.setStyle('rejectCursor', newValue);