Frage

Ich habe mir jetzt seit ungefähr einer Woche mir die Haare ausgerissen, es ist Zeit, mir Hilfe zu suchen ...

Ich kodiere eine kleine App, um mir den nächsten Zug zu zeigen, der den Bahnhof verlässt. Normalerweise wird nur die Stunde des nächsten Zuges angezeigt. Wenn Sie jedoch auf die PREFS -Schaltfläche klicken, wird das Anwendungsfenster vergrößert und ein Datagrid mit den Zügen und Stunden angezeigt. Wenn Sie auf die Schaltfläche Schließen in diesem Status klicken, werden Sie in den Status "Start" zurückgeführt oder sollte dies tun.

Das Problem ist, dass das Datagrid verschwindet, das Anwendungsfenster jedoch gleich groß bleibt. Es sollte zu seiner ursprünglichen Größe zurückkehren.

Ich habe viele verschiedene Ansätze ausprobiert und Vboxes durch Leinwand oder Panels ersetzt, aber keine hat funktioniert. Im Designmodus funktioniert alles beim Wechsel zwischen den Zuständen wie erwartet.

Dies ist das erste Mal, dass ich Zustände verwende, daher fehlt mir vielleicht etwas Grundlegendes.

Hier ist ein Code -Beispiel - ich verwende 2 Ansichtszustände, Start und Prefs.

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
creationComplete="init();" 
cornerRadius="12"
currentState='Start' width="350" height="250">
<mx:states>
    <mx:State name="Start">
        <mx:AddChild>
            <mx:VBox id="box_parent" width="100%" height="100%" verticalGap="2">
                <mx:Label text="Next Train Leaves At" textAlign="center" width="100%"/>
                <mx:Label text="--:--" width="100%" height="100" fontSize="64" id="timetext" textAlign="center" fontWeight="bold"/> 
                <mx:HBox width="100%" height="25" id="hbox1">
                    <mx:Button label="Prefs"
                        id="buttonPrefs"
                        click="currentState='Prefs'"/>
                    <mx:Spacer width="70%" id="spacer1"/>
                    <mx:Button 
                        label="Next"
                        click="findNextTrain()" id="buttonNext"/>   
                </mx:HBox>      
            </mx:VBox>      
        </mx:AddChild>
        <mx:SetProperty name="layout" value="vertical"/>
        <mx:SetProperty name="width" value="350"/>
        <mx:SetProperty name="height" value="220"/>
    </mx:State>
    <mx:State name="Prefs" basedOn="Start">
        <mx:AddChild relativeTo="{box_parent}" position="lastChild">
            <mx:DataGrid height="80%" width="100%" dataProvider="{trains}" id="traindata" editable="false">
                <mx:columns>
                    <mx:DataGridColumn headerText="Station" dataField="stationid"/>
                    <mx:DataGridColumn headerText="Leave" dataField="leave"/>
                </mx:columns>
            </mx:DataGrid>
        </mx:AddChild>
        <mx:RemoveChild target="{buttonPrefs}"/>
        <mx:SetProperty target="{box_parent}" name="height" value="500"/>
        <mx:AddChild relativeTo="{spacer1}" position="before">
            <mx:Button label="Close" click="currentState='Start'"/>
        </mx:AddChild>
        <mx:SetProperty name="height" value="570"/>
    </mx:State>
</mx:states>

<mx:transitions> 
    <mx:Transition fromState="*" toState="*"> 
        <mx:Resize target="{this}" duration="500"/> 
    </mx:Transition> 
</mx:transitions> 
</mx:WindowedApplication>
War es hilfreich?

Lösung

Ich habe noch keinen Weg gefunden, einen Zustand in Flex auf die im MXML bereitgestellten Werte zurückzusetzen. Sie müssen zurücksetzen, welche Werte Sie programmgesteuert brauchen. Bei dem angegebenen Beispielcode können Sie die Höhe der Anwendung zurücksetzen, wenn Sie zum Startzustand zurückkehren

currentStateChange="if(currentState == 'Start') this.height = 220"

Dadurch wird das WindowedEdApplication -Tag mitgeteilt, um das Ereignis zu verarbeiten, der nach dem Ändern des aktuellen Status geändert wurde, um zu überprüfen, ob der neue aktuelle Status gestartet wird, und um die Fensterhöhe festzulegen, falls dies der Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top