문제

나는 지금 일주일 정도 내 머리를 찢어 버렸다.

나는 역을 떠난 다음 열차를 보여주기 위해 작은 앱을 코딩하고 있습니다. 일반적으로 다음 열차의 시간 만 표시되지만 Prefs 버튼을 클릭하면 응용 프로그램 창이 커지고 Datagrid가 열차와 시간으로 표시됩니다. 해당 상태의 닫기 버튼을 클릭하면 '시작'상태로 돌아가거나 그렇게해야합니다.

문제는 DataGrid가 사라지지만 응용 프로그램 창의 크기가 동일하다는 것입니다. 원래 크기로 돌아 가야합니다.

나는 vbox를 캔버스 나 패널로 교체하면서 많은 다른 접근법을 시도해 왔지만 아무런 효과가 없었습니다. 설계 모드에서 상태를 전환 할 때 모든 것이 예상대로 작동합니다.

제가 주를 사용한 것은 이번이 처음이므로 근본적인 것을 놓치고있을 수 있습니다.

코드 샘플은 다음과 같습니다. 2 개의보기 상태, 시작 및 사전을 사용하고 있습니다.

<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>
도움이 되었습니까?

해결책

아직 MXML에 제공된 값으로 Flex의 상태를 재설정 할 수있는 방법을 찾지 못했습니다. 자신이 필요한 값을 프로그래밍 방식으로 재설정해야합니다. 제공된 샘플 코드의 경우 windowedapplication 태그에 다음을 추가하여 시작 상태로 다시 변경할 때 응용 프로그램의 높이를 재설정 할 수 있습니다.

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

이를 통해 WindowEdApplication 태그는 현재 상태를 변경 한 후 발송 된 이벤트를 처리하여 새 현재 상태가 시작되었는지 확인하고 Window Height를 설정하는지 확인합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top