Flex 4 Design View Extensibility Kit-カスタムコンポーネントをIDE上でレイアウトする-

FlexのカスタムコンポーネントをそのままFlash Builderに取り込むと、デザインビュー上でうまく配置できないことがあります。
(でも、実行すると正しく描画される)

特にmxのCanvasやAccordion等、Container系コンポーネントを拡張したカスタムコンポーネントFlash Builder上で配置して、さらにその上からボタン等の他のコンポーネントを配置しても、見た目上、配置されません。mxmlソースコードをみると、確かに配置されていますが。

この対処には、Design View Extensibility Kitを使って、Flash Builder上でレイアウトするための専用クラスを用意する必要があります。

※作成したカスタムコンポーネントが、コンポーネントライフサイクルにしたがって正しく作成されていない等、そもそも正しく描画されない場合は、Extensilibity Kitを使っても、うまく描画されません

Design View Extensibility Kit for Flex 4
http://coldfusionmx.com.br/devnet/flex/flashbuilder_extensibility/DesignViewExtKitReadme.htm

design.xmlの中に記述されているdesignExtensionタグで指定されるクラスが、Flash Builder上でレイアウトするための拡張クラスです。
例えば、mxのCanvasには、「com.adobe.flexide.extensions.components.mx.containers.CanvasExtension」クラスが指定されています。このように拡張クラスを指定しておかないと、IDE上でレイアウトがうまくいきません。

		<component name="mx.containers.Canvas" displayName="%Canvas.display.value" category="halolayout" filteredViewCategory="">
			<defaultAttribute name="width" value="200"/>
			<defaultAttribute name="height" value="200"/>
			<designExtension class="com.adobe.flexide.extensions.components.mx.containers.CanvasExtension"/>
			<mxmlProperties>
				<textfield id="label" name="%propertyLabel.label"/>
			</mxmlProperties>
		</component>

com.adobe.flexide.extensionsはSDKFlash Builderの中を探してもみつかりません。上記URLページにあるDownloadリンクから、「DV4ExtensionKit.fxp」をダウンロードしてください。このファイルの中に含まれています。
拡張子はfxpですが、zip形式として解凍できます。
上記ファイルには、サンプルソースコードが含まれていますので、それをみれば使い方がわかるでしょう。
カスタムコンポーネント上に子コンポーネントを配置したときの、サイズの再計算・再描画等が出来るようになります。

ちなみに、TabNavigatorやDataGridを配置したときに、NavigatorContentやDataGridColumn等の子コンポーネントが自動的に挿入されますが、これはdesign.xml内でinserterClassを指定して、そのクラスが挿入処理を行っています。このinserterClassはさきほどのExtensionKitには含まれておらず、Flash Builderに含まれています。com.adobe.flexbuilder.mxml.editorの中にあります。