2011-08-18 41 views
6

Tôi đã sử dụng bảng điều khiển Spark để hiển thị đối tượng bên trong hộp chứa. Bảng điều khiển và các yếu tố bên trong được tạo động. (sử dụng ActionScript). Tôi cần phải loại bỏ thanh tiêu đề của bảng điều khiển trong actionscript. Khi tôi cố gắng loại bỏ điều đó, tôi không thể che giấu điều tương tự.Bảng điều khiển thành phần Flex 4 Spark - Ẩn thanh tiêu đề

Đã thử các cách dưới đây.

  1. Đã sử dụng kiểu (tên lớp) và đặt headerheight = 0.

  2. Ghi đè thành phần bảng điều khiển và sử dụng thuộc tính this.titleBar.visible = false.

Nhưng không thể ẩn thanh tiêu đề.

Tôi đã sử dụng thành phần Bảng điều khiển tia lửa và Flash Builder 4.5 để phát triển.

Nếu có cách nào khác để đạt được điều này, vui lòng cho tôi biết.

+1

Chỉ cần tạo da không có thanh tiêu đề. Bảng điều khiển không có bất kỳ SkinParts yêu cầu – RIAstar

Trả lời

5

Đặt cược tốt nhất của bạn là tạo một làn da tùy chỉnh và di chuyển các thanh tiêu đề từ da. Nó đã rất nhanh chóng để đặt cùng một mẫu.

Đây là làn da tùy chỉnh của bạn; tạo ra như một bản sao của PanelSkin với các yếu tố trực quan đã nhận xét.

<?xml version="1.0" encoding="utf-8"?> 

<!-- 

ADOBE SYSTEMS INCORPORATED 
Copyright 2008 Adobe Systems Incorporated 
All Rights Reserved. 

NOTICE: Adobe permits you to use, modify, and distribute this file 
in accordance with the terms of the license agreement accompanying it. 

--> 

<!--- The default skin class for a Spark Panel container. 

    @see spark.components.Panel 

    @langversion 3.0 
    @playerversion Flash 10 
    @playerversion AIR 1.5 
    @productversion Flex 4 
--> 
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" blendMode="normal" mouseEnabled="false" 
    minWidth="131" minHeight="127" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5"> 

    <fx:Metadata> 
     <![CDATA[ 
     /** 
     * @copy spark.skins.spark.ApplicationSkin#hostComponent 
     */ 
     [HostComponent("spark.components.Panel")] 
     ]]> 
    </fx:Metadata> 

    <fx:Script fb:purpose="styling"> 
     <![CDATA[ 
     import mx.core.FlexVersion; 

     /* Define the skin elements that should not be colorized. 
     For panel, border and title background are skinned, but the content area, background, border, and title text are not. */ 
     static private const exclusions:Array = ["background", "titleDisplay", "contentGroup", "controlBarGroup", "border"]; 

     /* exclusions before Flex 4.5 for backwards-compatibility purposes */ 
     static private const exclusions_4_0:Array = ["background", "titleDisplay", "contentGroup", "controlBarGroup"]; 

     /** 
     * @private 
     */ 
     override public function get colorizeExclusions():Array 
     { 
      // Since border is styleable via borderColor, no need to allow chromeColor to affect 
      // the border. This is wrapped in a compatibility flag since this change was added 
      // in Flex 4.5 
      if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5) 
      { 
       return exclusions_4_0; 
      } 

      return exclusions; 
     } 

     /** 
     * @private 
     */ 
     override protected function initializationComplete():void 
     { 
      useChromeColor = true; 
      super.initializationComplete(); 
     } 

     /** 
     * @private 
     */ 
     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
     { 
      if (getStyle("borderVisible") == true) 
      { 
       border.visible = true; 
       background.left = background.top = background.right = background.bottom = 1; 
       contents.left = contents.top = contents.right = contents.bottom = 1; 
      } 
      else 
      { 
       border.visible = false; 
       background.left = background.top = background.right = background.bottom = 0; 
       contents.left = contents.top = contents.right = contents.bottom = 0; 
      } 

      dropShadow.visible = getStyle("dropShadowVisible"); 

      var cr:Number = getStyle("cornerRadius"); 
      var withControls:Boolean = 
       (currentState == "disabledWithControlBar" || 
       currentState == "normalWithControlBar"); 

      if (cornerRadius != cr) 
      { 
       cornerRadius = cr; 

       dropShadow.tlRadius = cornerRadius; 
       dropShadow.trRadius = cornerRadius; 
       dropShadow.blRadius = withControls ? cornerRadius : 0; 
       dropShadow.brRadius = withControls ? cornerRadius : 0; 

       setPartCornerRadii(topMaskRect, withControls); 
       setPartCornerRadii(border, withControls); 
       setPartCornerRadii(background, withControls);     
      } 

      if (bottomMaskRect) setPartCornerRadii(bottomMaskRect, withControls); 

      borderStroke.color = getStyle("borderColor"); 
      borderStroke.alpha = getStyle("borderAlpha"); 
      backgroundFill.color = getStyle("backgroundColor"); 
      backgroundFill.alpha = getStyle("backgroundAlpha"); 

      super.updateDisplayList(unscaledWidth, unscaledHeight); 
     } 

     /** 
     * @private 
     */ 
     private function setPartCornerRadii(target:Rect, includeBottom:Boolean):void 
     {    
      target.topLeftRadiusX = cornerRadius; 
      target.topRightRadiusX = cornerRadius; 
      target.bottomLeftRadiusX = includeBottom ? cornerRadius : 0; 
      target.bottomRightRadiusX = includeBottom ? cornerRadius : 0; 
     } 

     private var cornerRadius:Number; 
     ]]> 
    </fx:Script> 

    <s:states> 
     <s:State name="normal" /> 
     <s:State name="disabled" /> 
     <s:State name="normalWithControlBar" stateGroups="withControls" /> 
     <s:State name="disabledWithControlBar" stateGroups="withControls" /> 
    </s:states> 

    <!-- drop shadow can't be hittable so it stays sibling of other graphics --> 
    <!--- @private --> 
    <s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.32" distance="11" 
          angle="90" color="#000000" left="0" top="0" right="0" bottom="0"/> 

    <!-- drop shadow can't be hittable so all other graphics go in this group --> 
    <s:Group left="0" right="0" top="0" bottom="0"> 

     <!-- top group mask --> 
     <!--- @private --> 
     <s:Group left="1" top="1" right="1" bottom="1" id="topGroupMask" > 
      <!--- @private --> 
      <s:Rect id="topMaskRect" left="0" top="0" right="0" bottom="0"> 
       <s:fill> 
        <s:SolidColor alpha="0"/> 
       </s:fill> 
      </s:Rect> 
     </s:Group> 

     <!-- bottom group mask --> 
     <!--- @private --> 
     <s:Group left="1" top="1" right="1" bottom="1" id="bottomGroupMask" 
       includeIn="normalWithControlBar, disabledWithControlBar"> 
      <!--- @private --> 
      <s:Rect id="bottomMaskRect" left="0" top="0" right="0" bottom="0"> 
       <s:fill> 
        <s:SolidColor alpha="0"/> 
       </s:fill> 
      </s:Rect> 
     </s:Group> 

     <!-- layer 1: border --> 
     <!--- @private --> 
     <s:Rect id="border" left="0" right="0" top="0" bottom="0" > 
      <s:stroke> 
       <!--- @private --> 
       <s:SolidColorStroke id="borderStroke" weight="1" /> 
      </s:stroke> 
     </s:Rect> 

     <!-- layer 2: background fill --> 
     <!--- Defines the appearance of the PanelSkin class's background. --> 
     <s:Rect id="background" left="1" top="1" right="1" bottom="1"> 
      <s:fill> 
       <!--- @private 
         Defines the PanelSkin class's background fill. The default color is 0xFFFFFF. --> 
       <s:SolidColor id="backgroundFill" color="#FFFFFF"/> 
      </s:fill> 
     </s:Rect> 

     <!-- layer 3: contents --> 
     <!--- Contains the vertical stack of titlebar content and controlbar. --> 
     <s:Group left="1" right="1" top="1" bottom="1" id="contents"> 
      <s:layout> 
       <s:VerticalLayout gap="0" horizontalAlign="justify" /> 
      </s:layout> 

      <!--- @private --> 
<!--   <s:Group id="topGroup" mask="{topGroupMask}"> 
-->     
       <!-- layer 0: title bar fill --> 
       <!--- @private --> 
<!--    <s:Rect id="tbFill" left="0" right="0" top="0" bottom="1"> 
        <s:fill> 
         <s:LinearGradient rotation="90"> 
          <s:GradientEntry color="0xE2E2E2" /> 
          <s:GradientEntry color="0xD9D9D9" /> 
         </s:LinearGradient> 
        </s:fill> 
       </s:Rect> 
-->     
       <!-- layer 1: title bar highlight --> 
       <!--- @private --> 
<!--    <s:Rect id="tbHilite" left="0" right="0" top="0" bottom="0"> 
        <s:stroke> 
         <s:LinearGradientStroke rotation="90" weight="1"> 
          <s:GradientEntry color="0xEAEAEA" /> 
          <s:GradientEntry color="0xD9D9D9" /> 
         </s:LinearGradientStroke> 
        </s:stroke> 
       </s:Rect> 
-->     
       <!-- layer 2: title bar divider --> 
       <!--- @private --> 
<!--    <s:Rect id="tbDiv" left="0" right="0" height="1" bottom="0"> 
        <s:fill> 
         <s:SolidColor color="0xC0C0C0" /> 
        </s:fill> 
       </s:Rect> 
-->     
       <!-- layer 3: text --> 
       <!--- @copy spark.components.Panel#titleDisplay --> 
<!--    <s:Label id="titleDisplay" maxDisplayedLines="1" 
         left="9" right="3" top="1" bottom="0" minHeight="30" 
         verticalAlign="middle" textAlign="start" fontWeight="bold"> 
       </s:Label> 
--> 
<!--   </s:Group> 
-->    
      <!-- 
       Note: setting the minimum size to 0 here so that changes to the host component's 
       size will not be thwarted by this skin part's minimum size. This is a compromise, 
       more about it here: http://bugs.adobe.com/jira/browse/SDK-21143 
      --> 
      <!--- @copy spark.components.SkinnableContainer#contentGroup --> 
      <s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0"> 
      </s:Group> 

      <!--- @private --> 
      <s:Group id="bottomGroup" minWidth="0" minHeight="0" 
        includeIn="normalWithControlBar, disabledWithControlBar" > 

       <s:Group left="0" right="0" top="0" bottom="0" mask="{bottomGroupMask}"> 

        <!-- layer 0: control bar divider line --> 
        <s:Rect left="0" right="0" top="0" height="1" alpha="0.22"> 
         <s:fill> 
          <s:SolidColor color="0x000000" /> 
         </s:fill> 
        </s:Rect> 

        <!-- layer 1: control bar highlight --> 
        <s:Rect left="0" right="0" top="1" bottom="0"> 
         <s:stroke> 
          <s:LinearGradientStroke rotation="90" weight="1"> 
           <s:GradientEntry color="0xE5E5E5" /> 
           <s:GradientEntry color="0xD8D8D8" /> 
          </s:LinearGradientStroke> 
         </s:stroke> 
        </s:Rect> 

        <!-- layer 2: control bar fill --> 
        <s:Rect left="1" right="1" top="2" bottom="1"> 
         <s:fill> 
          <s:LinearGradient rotation="90"> 
           <s:GradientEntry color="0xDADADA" /> 
           <s:GradientEntry color="0xC5C5C5" /> 
          </s:LinearGradient> 
         </s:fill> 
        </s:Rect> 
       </s:Group> 
       <!-- layer 3: control bar --> 
       <!--- @copy spark.components.Panel#controlBarGroup --> 
       <s:Group id="controlBarGroup" left="0" right="0" top="1" bottom="1" minWidth="0" minHeight="0"> 
        <s:layout> 
         <s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="7" paddingBottom="7" gap="10" /> 
        </s:layout> 
       </s:Group> 
      </s:Group> 
     </s:Group> 
    </s:Group> 
</s:SparkSkin> 

Và đây là ứng dụng:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <s:VGroup> 
     <s:Panel /> 
     <s:Panel skinClass="PanelNoTitleBar"/> 
    </s:VGroup> 

</s:WindowedApplication> 

Bảng điều đầu tiên sẽ hiển thị da ban đầu; panel thứ hai hiển thị skin tùy chỉnh; không có thanh tiêu đề.

+0

Cảm ơn bạn đã nhập mã. Nó hoạt động tốt. – Srinivasan

+0

Câu trả lời hay. Cảm ơn rất nhiều! – Assaf

0

Skinning là lời khuyên chung, và rõ ràng đó là thiết kế dự định. Câu trả lời khác làm một công việc tốt cho thấy phương pháp này.

Tuy nhiên, cũng có một giải pháp phân lớp con tốt cho một câu hỏi liên quan: Flex 4 spark Panel has an ugly gray top part. Điều đó có thể là đủ nếu bạn chỉ muốn loại bỏ thanh tiêu đề.

Các vấn đề liên quan