У меня есть mxml-компонент "PresentationWindow", который для краткости просто:
<fx:Script>
//... functions here will be explained below
</fx:Script>
<s:Window>
<mx:Canvas id="presentationCanvas" width="100%" height="100%">
<mx:Button label="Test" width="100" height="25" left="0" top="100" />
</mx:Canvas>
</s:Window>
И я пытаюсь получить mx.controls.Alert для отображения по центрув окне, если пользователь пытается выйти, когда окно находится в StageDisplayState.FULL_SCREEN_INTERACTIVE .У меня не было проблем с отображением предупреждения и функционалом остановки / разрешения выхода, но само окно предупреждения не будет правильно центрироваться.
В настоящее время на CMD / CTRL + Q я сбрасываюокно из полноэкранного режима, предотвращение события закрытия окна и отображение предупреждения (то же самое ошибочное поведение, если я оставляю его в полноэкранном режиме):
Alert.show("Are you sure you want to quit with a presentation in progress?",
"Quit?", (Alert.YES | Alert.NO), presentationCanvas, alertHandler);
Я попытался сосредоточиться на «этом»,на объекте nativeWindow, а теперь и на presentationCanvas, который занимает все окно;однако во всех случаях я получаю этот великолепный эффект центрирования (независимо от того, находится кнопка в объекте canvas или нет).
Я также пытался добавить прослушиватель событий вокно для Event.FULLSCREEN , так что независимо от того, входите вы в полноэкранный режим или выходите из него, если окно предупреждения существует, используйте PopUpManager.centerPopUp () , чтобы попытаться центрировать предупреждение.
Ничто не переместит это окно оповещений в середину моего окна.
Есть идеи?(Полный код ActionScript ниже с моей текущей неудачной попыткой центрирования настоящего ...)
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.PopUpManager;
import mx.events.CloseEvent;
private var alert:Alert;
private function windowInit():void {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP;
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
nativeWindow.addEventListener(Event.CLOSING, preventCloseIfFullScreen);
}
protected function preventCloseIfFullScreen(e:Event):void {
if (stage.displayState == StageDisplayState.FULL_SCREEN_INTERACTIVE) {
e.preventDefault();
stage.addEventListener(Event.FULLSCREEN, adjustAfterFullScreen);
alert = Alert.show("Are you sure you want to quit with a presentation in progress?", "Quit?", (Alert.YES | Alert.NO), presentationCanvas, alertHandler);
//stage.displayState = StageDisplayState.NORMAL;
}
}
protected function adjustAfterFullScreen(e:FullScreenEvent):void {
if (alert) {
Alert.show("hi");
PopUpManager.centerPopUp(alert);
}
}
protected function alertHandler(e:CloseEvent):void {
if (e.detail == Alert.YES) {
NativeApplication.nativeApplication.exit();
}
else {
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
}
]]>
</fx:Script>