Flex4新推出了skin/换肤/外观设计的功能, adobe网站的flex开发人员中心有篇很好的文章介绍了这一功能, 介绍 Flex 4 beta 中的外观设计.

我们这里通过设计一个简单的TitleWindow皮肤来了解一下skin以及对skin中的相关component添加事件处理, 我们先来看一下最终效果图.

我们来看一下该窗口的右上角相关按钮的皮肤代码

				<s:SkinnableContainer id="btnMin" skinClass="RIA_Desktop.skins.appwin.ButtonMinSkin" toolTip="最小化"
						  width="12" height="12" right="60" top="10" />
				<s:SkinnableContainer id="btnMax" skinClass="RIA_Desktop.skins.appwin.ButtonMaxSkin" toolTip="最大化"
									  width="12" height="12" right="40" top="10" />
				<s:SkinnableContainer id="btnRestore" skinClass="RIA_Desktop.skins.appwin.ButtonRestoreSkin" toolTip="还原" visible="false"
						  width="12" height="12" right="40" top="10" />
				<s:SkinnableContainer id="btnClose" skinClass="RIA_Desktop.skins.appwin.ButtonCloseSkin" toolTip="关闭"
						  width="12" height="12" right="20" top="10" />

 

然后我们需要新建一个基于TitleWindow的自定义组件, 设置其skinClass为刚才设计的skin.

<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   width="800" height="500" skinClass="RIA_Desktop.skins.appwin.TitleWindowSkin"
			   >

重点在这里, 在自定义组件中添加相关按钮

// skin中的变量, 名称必须相同
[SkinPart(required="false")]
public var btnMin:SkinnableContainer;
[SkinPart(required="false")]
public var btnMax:SkinnableContainer;
[SkinPart(required="false")]
public var btnRestore:SkinnableContainer;
[SkinPart(required="false")]
public var btnClose:SkinnableContainer;

override protected function createChildren():void
{
	super.createChildren();

	//
	// 监听按钮事件
	//
	btnClose.addEventListener(MouseEvent.CLICK, onBtnClose);
	btnMax.addEventListener(MouseEvent.CLICK, onBtnMax);
	btnMin.addEventListener(MouseEvent.CLICK, onBtnMin);
	btnRestore.addEventListener(MouseEvent.CLICK, onBtnRestore);
}

// ....

/**
 * 自身关闭按钮处理, 同时派发关闭事件, 以便和项目应用程序相结合
 **/
protected function onBtnClose(event:MouseEvent):void
{
	btnMax.visible = true;
	btnRestore.visible = false;
	theStatus = 0;
	this.dispatchEvent(new AppWindowEvent('myClose', this));
}