2009-06-16 69 views
1

我一直在撕裂我的頭髮現在一個星期左右的時間,它的時間我尋求一些幫助......的Flex - 返回一個窗口到原來的狀態

我編碼一個小應用程序,以顯示我的下一個火車離開車站。通常只顯示下一列火車的小時數,但如果單擊prefs按鈕,則應用程序窗口會放大,並顯示列車和小時數據網格。在該狀態下點擊關閉按鈕會返回到「開始」狀態,或者應該這樣做。

問題是數據網格消失,但應用程序窗口保持相同的大小。它應該恢復到原來的大小。

我一直在嘗試很多不同的方法,用Canvas或Panels代替VBox,但都沒有工作。在設計模式中,當狀態之間切換時,一切都按預期工作

這是我第一次使用狀態,所以我可能會錯過一些基本的東西。

這是一個代碼示例 - 我使用2個視圖狀態,Start和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> 

回答

1

我還沒有找到一種方法來將Flex中的狀態重置爲MXML中提供的值。您必須以編程方式重置您需要的自定義值。在所提供的示例代碼的情況下,可以通過添加以下到WindowedApplication標籤改變回到起始狀態時,重新設置應用的高度

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

這告訴WindowedApplication標籤處理後分派的事件改變當前狀態以檢查新的當前狀態是否爲開始,並且如果是,則設置窗口高度。

+0

謝謝!那就是訣竅。所以這意味着如果需要的話,我也可以使用動作重置值。 – 2009-06-17 05:45:58