سؤال

لقد تم تمزيق شعري الآن لمدة أسبوع أو نحو ذلك ، فقد حان الوقت لطلب بعض المساعدة ...

أقوم بترميز تطبيق صغير لأريني القطار التالي الذي يغادر المحطة. عادةً ما يتم عرض ساعة القطار التالي فقط ، ولكن إذا قمت بالنقر فوق الزر Prefs ، يتم توسيع نافذة التطبيق ويتم عرض بيانات البيانات مع القطارات والساعات. إن النقر فوق الزر "إغلاق" في تلك الحالة يعيدك إلى حالة "ابدأ" ، أو يجب القيام بذلك.

تكمن المشكلة في أن DataGrid تختفي ، لكن نافذة التطبيق تبقى بنفس الحجم. يجب أن يعود إلى حجمه الأصلي.

لقد كنت أحاول الكثير من الأساليب المختلفة ، واستبدال Vboxes بواسطة قماش أو لوحات ولكن لم يعمل أي منها. في وضع التصميم ، كل شيء يعمل كما هو متوقع عند التبديل بين الحالات.

هذه هي المرة الأولى التي أستخدم فيها الدول ، لذلك قد أفتقد شيئًا أساسيًا.

إليك عينة رمز - أستخدم حالتين عرض ، ابدأ وسبق.

<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. يجب عليك إعادة ضبط القيم التي تحتاجها بنفسك برمجيًا. في حالة رمز العينة المقدم ، يمكنك إعادة تعيين ارتفاع التطبيق عند التغيير إلى حالة البدء عن طريق إضافة ما يلي إلى علامة WindowedApplication

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

هذا يخبر علامة WindowedApplication للتعامل مع الحدث الذي تم إرساله بعد تغيير الحالة الحالية للتحقق مما إذا كانت الحالة الحالية الجديدة تبدأ ، وتعيين ارتفاع النافذة إذا كان كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top