【问题标题】:Flex SkinnableContainer skin access Group inside contentGroupFlex SkinnableContainer 皮肤访问 Group inside contentGroup
【发布时间】:2011-12-01 19:31:07
【问题描述】:

我有皮肤类,我在 contentGroup 中定义了一个组:

<s:Group id="contentGroup" left="0" right="0" top="0" bottom="0" minWidth="475" minHeight="0">
        <s:layout>
            <s:HorizontalLayout paddingLeft="0" paddingRight="0" paddingTop="0" paddingBottom="0" gap="2" />
        </s:layout>


        <s:Group id="group_nav_custom_comp_hgroup_prevnext" left="0" right="0" top="0" bottom="0" minWidth="100" minHeight="0">
            <s:layout>
                <s:HorizontalLayout paddingLeft="0" paddingRight="0" paddingTop="0" paddingBottom="0" gap="5" />
            </s:layout>
            <s:Button label="Test Button"/>
        </s:Group>

    </s:Group>

现在,在扩展上述皮肤类的 CustomComponent 中,我尝试访问“group_nav_custom_comp_hgroup_prevnext”(这是 contentGroup 中的子组),以便在运行时向其添加元素:

public class GroupNavCustomContainer extends SkinnableContainer
    {

        private var m_group_prev_next:Group = null;
        private var m_bAdded_btns:Boolean = true;
        private var _prevbtn:UIComponent = null;

        public function GroupNavCustomContainer()
        {
            super();


            setStyle("skinClass", GroupNavCustomSkin);

        }
        //----------------------------------
        public function set prevBtn(ui_comp_prev:UIComponent):void
        {

            if(m_group_prev_next)   
            {
                _prevbtn = ui_comp_prev;
                m_bAdded_btns = true;
                invalidateProperties();
            }

        }
        //-------------------------------------------------------------------------
        override protected function partAdded(partName:String, instance:Object):void 
        {
            trace("In partAdded");


            if(partName == "contentGroup")
            {
                var group:Group = instance as Group;
                var visualElem:IVisualElement = group.getElementAt(0);
                m_group_prev_next = visualElem as Group;
            }

            super.partAdded(partName, instance);

        }
        //------------------------------------------------------------------------
        override protected function commitProperties():void 
        {

            super.commitProperties();

            if (m_bAdded_btns) 
            {

                m_bAdded_btns = false;
                m_group_prev_next.addElement(_prevbtn);

            }

        }




    }

结果是我的:group_nav_custom_comp_hgroup_prevnext 根本没有出现,这可以从编译时出现在其中的按钮不可见的事实证明。有谁知道如何让它出现? - 谢谢! -迈克

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

好的,我将我的子组添加为皮肤部分:

[SkinPart(required="true")] public var group_nav_custom_comp_hgroup_prevnext:Group;

所以现在我可以从 CustomComponent 的任何地方访问它。但是“group_nav_custom_comp_hgroup_prevnext”中的按钮仍然没有出现。有人知道为什么吗?

package com.viiv.digi.views.navigation
{
          import mx.core.IVisualElement;
          import mx.core.UIComponent;

          import skins.GroupNavCustomSkin;

          import spark.components.Group;
          import spark.components.SkinnableContainer;

          public class GroupNavCustomContainer extends SkinnableContainer
          {

                    private var m_group_prev_next:Group = null;
                    private var m_bAdded_btns:Boolean = false;
                    private var _prevbtn:UIComponent = null;


                    [SkinPart(required="true")]
                    public var group_nav_custom_comp_hgroup_prevnext:Group;



                    public function GroupNavCustomContainer()
                    {
                              super();


                              setStyle("skinClass", GroupNavCustomSkin);

                    }
  //----------------------------------
                    public function set prevBtn(ui_comp_prev:UIComponent):void
                    {

                        _prevbtn = ui_comp_prev;
                              m_bAdded_btns = true;
                              invalidateProperties();
        }
  //------------------------------------
                    public function get prevBtn():UIComponent
                    {
                              return _prevbtn;
                    }
  //-------------------------------------------------------------------- -----
                    override protected function partAdded(partName:String, instance:Object):void
                    {
  trace("In partAdded");
                              super.partAdded(partName, instance);

                    }
  //-------------------------------------------------------------------- ----
                    override protected function commitProperties():void
                    {

                              super.commitProperties();

                              if (m_bAdded_btns)
                              {

                                        m_bAdded_btns = false;
                                        group_nav_custom_comp_hgroup_prevnext.addElement(_prevbtn);

                              }

                    }




          }
}

【问题讨论】:

    标签: actionscript-3 apache-flex flex4.5 skin


    【解决方案1】:

    contentGroup 应该包含添加到 SkinnableContainer 的元素,没有其他内容。这是在父组件中管理的,而不是在皮肤中。因此,您将在 contentGroup 正下方添加“group_nav_custom_comp_hgroup_prevnext”组组件定义,然后在 GroupNavCustomContainer 中引用它。

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 2013-05-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多