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

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

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

Ответы [ 5 ]

2 голосов
/ 17 августа 2011

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

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

1 голос
/ 17 августа 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>

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

1 голос
/ 17 августа 2011

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

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

0 голосов
/ 17 августа 2011

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

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


onClose(...
x.addEventListener(MouseEvent.CLICK...
...