我已经把头发撕掉了一个星期左右,是时候寻求帮助......

我正在编写一个小应用程序来向我展示下一班离开火车站的火车。通常只显示下一列火车的小时,但是如果单击prefs按钮,应用程序窗口会放大,并显示带有火车和小时的数据网格。单击处于该状态的关闭按钮将返回“开始”状态,或者应该执行此操作。

问题是数据网格消失了,但应用程序窗口保持相同的大小。它应该恢复原来的大小。

我一直在尝试许多不同的方法,用Canvas或Panel取代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>
有帮助吗?

解决方案

我还没有找到一种方法将Flex中的状态重置为MXML中提供的值。您必须以编程方式重置自己需要的值。对于提供的示例代码,您可以通过将以下内容添加到WindowedApplication标记中来重置回到开始状态时重置应用程序的高度

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

这告诉WindowedApplication标记处理在更改当前状态以检查新当前状态是否为Start之后调度的事件,并设置窗口高度(如果是)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top