Как я могу запретить элементам за всплывающим окном заголовка получать события мыши?
У меня есть 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
Если вы не ищете modal
ответ, тогда все, что я могу порекомендовать, это удалить всех соответствующих слушателей, когда всплывающее окно открыто, и добавить их обратно, когда всплывающее окно удалено.
x.removeEventListener(MouseEvent.CLICK...
PopUpManager.addPopup(...
onClose(...
x.addEventListener(MouseEvent.CLICK...