Я думаю, теперь становится немного яснее. MouseChildren является свойством DisplayObjectContainer. И, как показано в следующем примере, DisplayObjectContainer не отправляет никаких событий щелчка мышью, когда щелчок происходит в области, которая не занята ни одним из его дочерних элементов. Это не интуитивно понятно, потому что DisplayObjectContainer имеет событие click, унаследованное от InteractiveObject, поэтому один (новичок вроде меня) будет ожидать, что он отправит событие, если я нажму на контейнер. Установка типа mouseChildren = false выравнивает DisplayObjectContainer, поэтому будет отправлено событие click для любого из дочерних элементов, имеющего target в качестве контейнера. Но!!! Это по-прежнему предполагает, что вы нажимаете на ребенка, а не на пустую область. Нет способа отправить его, когда щелчок сделан внутри области, которая не захвачена ребенком. Этот пример показывает это: если вы щелкнете либо по TextField, либо по заливке, то даже отправляется с SpriteVisualElement в качестве цели. Если вы щелкнете в другом месте, событие не будет отправлено. Мне все еще неясно, почему это предполагаемое поведение, принимая во внимание наличие события click на DisplayObjectContainer. Может быть, потому, что контейнеры вовсе не предназначены для обнаружения щелчков мышью, а их дети? Это немного не понятно для меня.
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="creationCompleteHandler(event)" >
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function creationCompleteHandler(event:FlexEvent):void {
var tf:TextField = new TextField();
tf.text = "I'm inside SpriteVisualElement!";
tf.background = true;
tf.backgroundColor = 0xff0000;
tf.alpha = 0.75;
tf.selectable = false;
tf.width = 150;
tf.height = 25;
uic.addChild(tf);
uic.addEventListener(MouseEvent.CLICK, clickHandler);
uic.mouseChildren = false;
uic.mouseEnabled = true;
uic.graphics.lineStyle(1, 0xFF0000);
uic.graphics.moveTo(0,0);
uic.graphics.lineTo(uic.width,0);
uic.graphics.lineTo(uic.width,uic.height);
uic.graphics.lineTo(0,uic.height);
uic.graphics.lineTo(0,0);
uic.graphics.beginFill(0x00FF00,1);
uic.graphics.drawRect(12, 12, 178, 28);
uic.graphics.endFill();
}
protected function clickHandler(e:MouseEvent):void {
trace("click detected, target:",e.target);
}
]]>
</fx:Script>
<s:SpriteVisualElement id="uic" horizontalCenter="0" verticalCenter="0" width="200" height="50" />
</s:Application>