Как я могу запретить элементам за всплывающим заголовком получать события мыши?

У меня есть Popup скин TitleWindow, который я использую в качестве всплывающего окна, но элементы за ним получают события наведения мыши и щелчка. Есть ли вариант, который позволяет мне предотвратить появление mousevents за основной группой содержимого окна?

РЕДАКТИРОВАТЬ: Чтобы уточнить - я не спрашиваю, как сделать окно модальным. Элементы буквально за всплывающим окном — не в основной форме, а сбоку, а позади и скрыты — получают события мыши, когда пользователь щелкает область contentGroup части скина. Этого не происходит, если пользователь щелкает элементы в этой группе, но небольшой промах может вызвать неожиданное появление фоновой кнопки.


person Dan Monego    schedule 16.08.2011    source источник


Ответы (5)


Когда вы создаете всплывающее окно, установите modal=true. Что-то типа:

var pop:MyPopUpClass = PopUpManager.createPopUp(parent, MyPopUpClass, true) as MyPopUpClass;

person NoobsArePeople2    schedule 16.08.2011

Вам нужно сделать всплывающее окно модальным окном. когда вы делаете что-то модальным, это означает, что окно (предупреждение, всплывающее окно, titleWindow и т. д.) останется наверху, а остальная часть экрана зависнет до закрытия верхнего окна.

«PopUpManager также обеспечивает модальность, так что окна под всплывающим окном не могут получать события мыши, а также предоставляет событие, если пользователь щелкает мышью за пределами окна, чтобы разработчик мог закрыть окно или предупредить пользователя».

Значение модального окна по умолчанию — false. вы можете установить его в true, вставив true в то время как addPopup или createPopup

public static function addPopUp(window:IFlexDisplayObject, parent:DisplayObject, modal:Boolean = false, childList:String = null):void 

public static function createPopUp(parent:DisplayObject, className:Classe, modal:Boolean = false, childList:String = null):IFlexDisplayObject 
person krishma sood    schedule 17.08.2011

Я решил это, заменив это:

<s:SparkSkin ...>
<s:Rect height="{hostComponent.height}" radiusX="10" width="{hostComponent.width}">
    <s:fill>
        <s:SolidColor color="#F5F4EB"/>
    </s:fill>
</s:Rect>

<!-- header, move area, close button and other details -->
<s:Group id="contentGroup"
     top="40"
     left="10"
     right="10"
     bottom="10">

</s:Group>
</s:SparkSkin>

С этим:

<s:SparkSkin ...>
<s:Rect height="{hostComponent.height}" radiusX="10" width="{hostComponent.width}">
    <s:fill>
        <s:SolidColor color="#F5F4EB"/>
    </s:fill>
</s:Rect>
<!-- header, move area, close button and other details -->
<s:Group top="40"
     left="10"
     right="10"
     bottom="10">
    <s:Rect top="0"
        left="0"
        right="0"
        bottom="0">
        <s:fill>
            <s:SolidColor color="0xF5F4EB" />
        </s:fill>
    </s:Rect>
    <s:Group id="contentGroup"
             top="0"
             left="0"
             right="0"
             bottom="0">

    </s:Group>
</s:Group>
</s:SparkSkin>

Создание прямоугольного объекта за группой сделало его таким, чтобы он нормально принимал события щелчка.

person Dan Monego    schedule 17.08.2011

Если вы не ищете ответ modal, то все, что я могу порекомендовать, — это удалить всех соответствующих слушателей при открытии всплывающего окна и добавить их обратно при удалении всплывающего окна.

x.removeEventListener(MouseEvent.CLICK...
PopUpManager.addPopup(...


onClose(...
x.addEventListener(MouseEvent.CLICK...
person Sam DeHaan    schedule 17.08.2011

Попробуйте использовать свойство opaqueBackground. .

person merv    schedule 17.08.2011