我有一个AIR应用程序。它应该用鼠标在屏幕上移动。为了达到这个目的,我使用了这个事件:
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, true,-2);
与插入的元素相比,应该使用最低优先级激活它,例如应该滚动,单击等的元素。
我尝试了下面显示的解决方案,事件优先级设置为-1,因为可能会发生2个不同的事件,我的移动应用程序事件应该是最后一个要服务或根本不应该服务的事件。
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="200"
height="200"
applicationComplete="init()">
<fx:Script>
<![CDATA[
import mx.core.Window;
import mx.events.ScrollEvent;
private function init():void {
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, true,-2);
}
private function onMouseDown(event:MouseEvent):void {
trace("clicked on stage "+event.currentTarget.toString());
if(event.currentTarget == stage){
trace("catched stage target");
this.nativeWindow.startMove();
event.stopImmediatePropagation();
}
}
function scrolledCanvasHandler(event:ScrollEvent){
trace("clicked on canvas "+event.currentTarget.toString());
event.stopPropagation();
}
]]>
</fx:Script>
<mx:Canvas x="29" y="34" width="80%" height="80%" backgroundColor="#343434" scroll="scrolledCanvasHandler(event)">
<mx:Label x="25" y="77" text="moving window, moving window"
fontSize="18" color="#FFFFFF" fontWeight="bold"/>
</mx:Canvas>
</s:WindowedApplication>
你会注意到
event.stopPropagation();
不起作用。
也许我的解决方案不是最适合实现这一目标的。有更好的解决方案吗?
克里斯
答案 0 :(得分:2)
这就是我在我的应用程序中所做的:
<s:HGroup id="appTitleBar"
width="100%" height="35"
styleName="titleBar"
mouseDown="nativeWindow.startMove();"
doubleClickEnabled="true"
doubleClick="nativeWindow.minimize();"
contentBackgroundColor="#313131"/>
点击(+拖动)此HGroup将拖动窗口。 duobleclick将最小化它。
修改强> 不要让你的整个应用程序可拖动,这只会让用户感到困惑。 和btw优先应该是积极的而不是消极的 - 但也不要惹这个。不是任何人的预期行为。