Flex - إعادة نافذة إلى حالتها الأصلية
سؤال
لقد تم تمزيق شعري الآن لمدة أسبوع أو نحو ذلك ، فقد حان الوقت لطلب بعض المساعدة ...
أقوم بترميز تطبيق صغير لأريني القطار التالي الذي يغادر المحطة. عادةً ما يتم عرض ساعة القطار التالي فقط ، ولكن إذا قمت بالنقر فوق الزر 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 للتعامل مع الحدث الذي تم إرساله بعد تغيير الحالة الحالية للتحقق مما إذا كانت الحالة الحالية الجديدة تبدأ ، وتعيين ارتفاع النافذة إذا كان كذلك.