这个概念看起来很简单,但是我很难做到正确,找不到任何可以帮助我的事情。
我有一个我需要执行拖放操作的面板,但我只想在用户按下面板的特定区域时执行该操作。我可以通过这样做为面板添加一个Icon:
[Embed("/img/icon.png")]
[Bindable]
public var dragIcon:Class;
newPanel.titleIcon = dragIcon;
但是我真正想要添加的是一个盒子,然后我可以添加我的听众来拖放鼠标,就像我在动作脚本中创建的一些画布一样,
var tempBox:Box = new Box;
tempBox.x=0;
tempBox.y=0;
tempBox.width = 20;
tempBox.height = 44;
tempBox.setStyle("horizontalAlign","center");
tempBox.setStyle("verticalAlign","middle");
tempBox.addEventListener(MouseEvent.ROLL_OVER,over);
tempBox.addEventListener(MouseEvent.ROLL_OUT,out);
tempBox.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownAnswer);
var tempImg:Image = new Image();
tempImg.source = grabbableItem;
tempBox.addChild(tempImg);
myCanvas.addChild(tempBox);
那么我需要做些什么来使用tempBox并将其转换为一个类用作我的面板titleIcon?
编辑12/29/09: 所以我想出了一些我正在扩展面板类的东西(如下所示),但所有这些都是用我可以公开访问的东西覆盖图标。我确定那里有更好的方法吗?
package custClass
{
import mx.containers.Box;
import mx.containers.Panel;
import mx.controls.Image;
public class DragPanel extends Panel
{
[Bindable] public var iconBox:Box = new Box();
[Embed("../img/doc_page.png")] [Bindable] public var grabbableItem:Class;
public function DragPanel()
{
super();
}
override protected function createChildren():void{
super.createChildren();
iconBox.x = 10
iconBox.y = 4
iconBox.width = 20;
iconBox.height = 20;
iconBox.setStyle("horizontalAlign","center");
iconBox.setStyle("verticalAlign","middle");
iconBox.setStyle("borderStyle","solid");
iconBox.setStyle("backgroundColor",0x000000);
var tempImg:Image = new Image();
tempImg.source = grabbableItem;
iconBox.addChild(tempImg);
this.rawChildren.addChild(iconBox);
}
}
}
编辑1/7/10(或根据我的Windows手机短信16): 从下面使用Chaims帮助是我的新答案。
创建一个像Chaim所说的框mxml组件,但也要添加以下脚本块。
<mx:Script>
<![CDATA[
import mx.core.Application;
[Embed("/img/doc_page.png")]
[Bindable]
public var grabbableItem:Class;
public function init():void{
this.addEventListener(MouseEvent.MOUSE_DOWN,Application.application.mouseDownSection);
this.addEventListener(MouseEvent.ROLL_OVER,Application.application.over);
this.addEventListener(MouseEvent.ROLL_OUT,Application.application.out);
}
]]>
</mx:Script>
这会在Box上添加我想要的所有事件监听器,用作我的图标。现在只需将该框添加为图标,就可以了。
panel.titleIcon = DraggableBox;
我猜因为它是一个单独的mxml组件,所以它现在是一个类,但我不认为我理解为什么。
答案 0 :(得分:1)
Panel希望titleIcon属性值为IFactory并自己创建一个实例。
让你的盒子成为一个组件(让我们把它命名为DraggableBox.mxml):
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml"
x="0" y="0" width="20" height="44"
horizontalAlign="center" verticalAlign="middle">
<mx:Image source="{grabbableItem}"/>
</mx:Box>
并将其分配给titleIcon:
<mx:Panel titleIcon="{DraggableBox}" >
...
</mx:Panel>
如果您想在ActionScript中使用ClassFactory:
panel.titleIcon = new ClassFactory(DraggableBox);