2008-12-10 12 views
5

मैं एडोब फ्लेक्स और एआईआर के साथ एक एप्लीकेशन विकसित कर रहा हूं, और मैं स्क्रॉलिंग को हल करने का तरीका जानने के लिए दीवार के खिलाफ अपने सिर को टक्कर दे रहा हूं मुद्दा।एडोब फ्लेक्स/एआईआर: एक उप-घटक स्क्रॉल करना, पूरी विंडो

अपने मुख्य अनुप्रयोग विंडो (बहुत सरलीकृत) की बुनियादी संरचना यह है:

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
    paddingTop="0" paddingRight="0" paddingBottom="0" paddingLeft="0" 
    width="800" height="600" layout="vertical" verticalAlign="top" 
> 
    <mx:VBox id="MainContainer" width="100%" height="100%"> 
     <mx:Panel id="Toolbars" width="100%" height="25" /> 
     <mx:HDividedBox width="100%" height="100%" > 
     <mx:Panel id="Navigation" minWidth="200" height="100%" /> 
     <mx:VBox id="MainContent" width="100%"> 
      <mx:Panel width="100%" height="200" /> 
      <mx:Panel width="100%" height="200" /> 
      <mx:Panel width="100%" height="200" /> 
      <mx:Panel width="100%" height="200" /> 
      <mx:Panel width="100%" height="200" /> 
     </mx:VBox> 
     <mx:Panel id="HelpContent" minWidth="200" height="100%" /> 
     </mx:HDividedBox> 
     <mx:Panel id="FooterContent" width="100%" height="25" /> 
    </mx:VBox> 
</mx:WindowedApplication> 

दिक्कत यह है कि "MainContent" बॉक्स उप-घटक की एक बड़ी सूची है, और उस लंबी सूची की उपस्थिति शामिल हो सकता है "मेनकॉन्टेनर" vbox के आस-पास, जीयूआई के उच्चतम स्तर पर दिखाई देने के लिए लंबवत स्क्रॉलबार का कारण बनता है।

यह पूरी तरह से मूर्खतापूर्ण दिखता है, जिसमें पूरे एप्लिकेशन विंडो के आसपास स्क्रॉलबार होते हैं।

इसके बजाय मैं जो खोज रहा हूं वह एक समाधान है जहां स्क्रॉलबार केवल "मेनकंटेंट" vbox (साथ ही नेविगेशन और हेल्पकंटेंट पैनलों पर भी लागू होता है, यदि उनकी सामग्री विंडो सीमाओं से पहले फैली हुई हो)।

मुझे स्टैक ओवरफ्लो पर related question मिला, जहां समस्या का समाधान माता-पिता कंटेनरों पर "ऑटोलायआउट" और "लंबवत स्क्रॉलपॉलिसी" विशेषताओं का उपयोग करना था।

इसलिए मैंने सभी मूल कंटेनरों में ऑटोलायआउट = "झूठी" और लंबवतस्कोलपॉलिसी = "ऑफ" विशेषताओं को जोड़ने की कोशिश की, साथ ही साथ "मेनकंटेंट" vbox पर verticalScrollPolicy = "on" को जोड़ने का प्रयास किया। लेकिन उस प्रयोग का अंत परिणाम यह था कि सामग्री को मुख्य कंटेनर से आसानी से फिसल दिया गया था (और बिना किसी अंगूठे के बेकार स्क्रॉलबार को मेनकंटेंट vbox में जोड़ा गया था)।

कोई भी इसे हल करने के बारे में जानता है?

उत्तर

1

एक समाधान मिला।

वीबीओक्स को आक्रामक रूप से अपने ऊर्ध्वाधर स्थान को विस्तारित करने और अपने माता-पिता को स्क्रॉलबार विकसित करने के लिए मजबूर करने से रोकने का एकमात्र तरीका दिखता है) VVox को कैनवास में लपेटना है।

स्क्रॉलबल वीबॉक्स नामक एक आसान छोटा घटक here है, जो कुछ बुककेपिंग मुद्दों की देखभाल करते समय कामकाज करता है (जैसे वीबीओक्स में बच्चों को जोड़ना और निकालना, उन्हें कैसा रैपर के चारों ओर गुजरना)।

0

आपकी समस्या कुछ ऐसे समय की तरह दिखती है जिसे मैंने कुछ समय पहले संघर्ष किया था। मुझे this discussion से मेरा उत्तर मिला: measure()Box के कार्यान्वयन को अक्षम करें।

यह एक बहुत ही आसान फिक्स था जो मेरे मामले में पूरी तरह से काम करता था और किसी भी "संपार्श्विक क्षति" का कारण नहीं बनता है। आपके परिणाम भिन्न हो सकते हैं।

package whatever 
{ 
    import mx.containers.Box; 

    /** 
    * A Box that has no measure() implementation. 
    * 
    * <p> 
    * See http://old.nabble.com/-flex_india%3A3318--Size-layout-issues-with-respect-to-parent-containers-to12882767.html 
    * for more info. 
    * </p> 
    */ 
    public class NonMeasuredBox extends Box 
    { 
     /** 
     * Constructor 
     */ 
     public function NonMeasuredBox():void 
     { 
      super(); 
     } 

     override protected function measure():void { /* disabled */ } 
    } 
} 
+0

को स्क्रॉलबार मुझे लगता है कि एक बाद दोपहर में की कोशिश दे देंगे करना चाहते हैं। मैं कल्पना करता हूं, हालांकि, यह मापने के उपाय कंटेनर के क्षैतिज आकार प्रदान करना मुश्किल बनाता है। मैं सिर्फ लंबवत स्क्रॉलिंग समस्या को ठीक करना चाहता हूं। – benjismith

+0

आप पूरी तरह से सही हैं - यह एक बहुत ही कठोर हैक है लेकिन कुछ विशिष्ट परिस्थितियों में उपयोगी हो सकता है (जैसे मेरा।) – hasseg

6

एक एचबॉक्स या वीबॉक्स, स्क्रॉल बार के बिना अपनी सामग्री को प्रदर्शित करने के लिए जितना संभव हो उतना कठिन प्रयास करेगा। यह एक बाध्य कंटेनर (अक्सर मुख्य अनुप्रयोग तक सभी तरह से) को मजबूर करता है, जो कि उपलब्ध सीमाओं में फ़िट होने के लिए सामग्री बहुत बड़ी है, तो स्क्रॉल करना होगा।

दृश्यों के पीछे, एचबीओक्स या वीबॉक्स, अपने बच्चों द्वारा आवश्यक आयामों से मेल खाने के लिए मापनविड्थ और माइकहेइट गुणों को मापने के लिए अपने माप() फ़ंक्शन में सेट कर रहा है। अभिभावक कंटेनर उस सिफारिश का सम्मान करेगा और स्क्रॉलिंग का कार्य प्रदर्शन सूची को ऊपर ले जाएगा।

हैसेग का समाधान कई मामलों में काम करता है क्योंकि यह कंटेनर को मापने से रोकता है, लेकिन यह हैकी की तरह है। अपने कंटेनरों के लिए प्रतिस्थापन उप-वर्गों के निर्माण के बिना आप यहां क्या कर सकते हैं।कंटेनर उदाहरण पर जिसे आप स्क्रॉल करना चाहते हैं, मिनविड्थ या मिनहाइट 0 पर सेट करें। यह उस कंटेनर के मापाMinWidth या मापाMinHeight गुणों पर प्राथमिकता लेगा, जिससे माता-पिता को वास्तविक आकार को कुछ और प्रबंधनीय सेट करने की अनुमति मिलती है।

0
बजाय एक कैनवास में VBox लपेटकर के

, VBox का सेट minHeight संपत्ति आप 0.

संबंधित मुद्दे