У меня есть приложение 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();
не работает.
Возможно, мое решение не совсем подходит для этого. Есть ли лучшие решения?
Chris