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

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

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

5 ответов

Решение

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

<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>

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

При создании всплывающего набора modal=true, Что-то вроде:

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

Вам нужно сделать ваше всплывающее окно модальным окном. когда вы делаете что-то модальное, это означает, что окно (Alert, popup, 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 

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

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

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


onClose(...
x.addEventListener(MouseEvent.CLICK...
Другие вопросы по тегам