0

私はこれを理解しようとして目が出血するまで、たくさんの調査を行い、 AdobeLiveDocsを読みました。

複合カスタムコンポーネントをActionScriptで構築していますが、サブコントロールを水平に配置したいと考えています。これは、それらをHGroupコンポーネントに追加し、HGroupをコンポーネントに追加することで正常に機能します。問題は、パーセンテージベースのサイズ設定にあります。

_horizontalGroup:HGroupコンテナのサイズに基づいて、自分でサイズを設定する必要があります。

コードをステップスルーすると、各UIComponentの親プロパティが...であることがわかります。

  • _horizo​​ntalGroup.parent = ReportGridSelector
  • ReportGridSelector.parent = grpControls

grpControlsに明示的なサイズがある場合、ReportGridSelectorにもそのサイズを設定するべきではありませんか?

カスタムコンポーネントは次のように実装されます...
注:ReportControlはUIComponentを拡張し、サイジングロジックは含まれていません

public class ReportGridSelector extends ReportControl{

  /*other display objects*/
  private var _horizontalGroup:HGroup;

    public function ReportGridSelector(){
        super();
        percentHeight = 100;
        percentWidth = 100;
    }

    override protected function createChildren():void{

        super.createChildren();

        if(!_horizontalGroup){
            _horizontalGroup = new HGroup();

            //I WANT SIZE BY PERCENTAGE, BUT THIS DOESN'T WORK
            _horizontalGroup.percentWidth = 100;
            _horizontalGroup.percentHeight = 100;

            //EXPLICITLY SETTING THEM WORKS, BUT IS STATIC :-(
            //_horizontalGroup.width = 200;
            //_horizontalGroup.height = 200;
            addChild(_horizontalGroup);
        }
    }
}

MXMLコードの消費

<?xml version="1.0" encoding="utf-8"?> 
<s:VGroup id="grpControls" width="200" height="200">
     <ReportControls:ReportGridSelector width="100%" height="100%"/>
</s:VGroup>

とプロパティを明示的に定義すると、すべてが正常に表示され_horizontalGroupます。またはを試してみると、すべてのコントロールが一緒につぶれてしまいます。widthheight_horizontalGroup.percentWidthpercentHeight

何が起こっているのかについて何か考えはありますか?

4

1 に答える 1

1

updateDisplayListからディスプレイリストを無効化する際にレイアウトを行います。

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);

    _horizontalGroup.width = unscaledWidth;
    _horizontalGroup.height = unscaledHeight;
}

Flex コンポーネントのライフサイクルを理解する:

http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html

createChildren

コンポーネントの子コンポーネントを作成します。たとえば、ComboBox コントロールには、TextInput コントロールと Button コントロールが子コンポーネントとして含まれています。

詳しくは、createChildren() メソッドの実装を参照してください。

updateDisplayList

以前のすべてのプロパティとスタイルの設定に基づいて、画面上のコンポーネントの子のサイズと位置を決定し、コンポーネントによって使用されるスキンまたはグラフィック要素を描画します。コンポーネントの親コンテナによって、コンポーネント自体のサイズが決まります。

于 2012-05-24T02:48:11.523 に答える