2008-12-10 39 views
5

我發展與Adobe Flex和AIR應用程序,而我一直在敲打我的頭靠在牆上,試圖找出如何解決一個滾動問題。Adob​​e Flex的/ AIR:滾動的子組件,而不是整個窗口

我的主應用程序窗口(大大簡化)的基本結構是這樣的:

<?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」框可能包含巨大的子組件的列表,以及一長串的存在導致垂直滾動條出現在GUI的最高級別,圍繞「MainContainer」盒子。

它看起來真的很傻,有圍繞整個應用程序窗口滾動條。

我正在尋找的是一個解決方案,其中滾動條僅應用於「MainContent」vbox(以及Navigation和HelpContent面板,如果其內容延伸超過窗口邊界)。

我在StackOverflow上找到related question,問題的解決方案是在父容器上使用「autoLayout」和「verticalScrollPolicy」屬性。

所以我嘗試添加的autoLayout =「假」和verticalScrollPolicy =「關閉」屬性,所有父容器,以及verticalScrollPolicy =「上」到「搜索Maincontent」 VBOX。但是,該實驗的最終結果是,內容只是從主容器中剪切而來(並且沒有拇指的無用滾動條被添加到MainContent vbox中)。

任何人都知道如何解決這個問題?

回答

1

找到了解決方案。

貌似防止積極擴展其垂直空間(並迫使其父母成長滾動條)的垂直框的唯一方法是來包裝垂直框在畫布上。

有一個方便的小部件here,叫ScrollableVBox,同時利用一些簿記問題護理(如添加和刪除孩子到垂直框中,路過他們身邊的卡瓦酒包裝)執行的解決方法。

0

你的問題看起來很像我以前掙扎的那個。我從this discussion找到了我的答案:只需禁用Boxmeasure()執行。

這是一個很容易解決其工作完全在我的情況,沒有引起任何「附帶損害」。你的結果可能有所不同

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 2008-12-10 15:18:31

6

HBox或VBox會嘗試儘可能難以在沒有滾動條的情況下顯示其內容。這會強制父容器(通常一直到主應用程序)成爲必須滾動的容器,如果內容太大而無法容納可用邊界。

的幕後,HBox中或垂直框在其量度設置measuredMinWidth和measuredMinHeight屬性()函數,以匹配由它的孩子所需要的尺寸。父容器將遵守該建議,並且滾動的任務向上移動顯示列表。

hasseg的解決方案可在許多情況下,因爲它從測量停止容器,但它是一種哈克。這是你可以做的,而不用爲你的容器構建替換子類。在要滾動的容器實例上,將minWidth或minHeight設置爲0。這將優先於該容器的measuredMinWidth或measuredMinHeight屬性,允許父級將實際大小設置爲更易於管理的內容。

0

而是在帆布包裹的垂直框的,垂直框中的設置minHeight屬性的你想有滾動條爲0