Как я могу сделать mx.controls.Alert по центрусоставная часть - PullRequest
0 голосов
/ 04 августа 2010

У меня есть 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>

1 Ответ

0 голосов
/ 04 августа 2010

Бла, самая глупая ошибка месяца. StageAlign.TOP вместо StageAlign.TOP_LEFT .Он центрировал все в окне, а затем все, на чем я пытался сосредоточиться, начиналось с середины ширины окна.

...