viewstack切换视图和自定义事件的例子

本文介绍了使用Flex进行界面开发时,如何利用ViewStack组件进行视图切换,并结合实例展示了在登录场景中点击按钮后切换到主界面的过程。详细探讨了组件的层级结构以及自定义事件的使用。
摘要由CSDN通过智能技术生成

最近刚开始学习flex,记录下学习过程,也备以后查阅。

以一个登录过程来做示例,启动程序后,显示登录界面,点击登录按钮后切换到程序的主界面,效果图如下:

 


程序层次如下:


主文件:Main.mxml:

<?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"
					   xmlns:component="component.*"
					   backgroundAlpha="0" creationComplete="init()" mouseDown="moveWindow()"
					   showStatusBar="false">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import events.LoginResult;
			
			private function moveWindow():void {
				
				this.nativeWindow.startMove();
			}
			
			private function init():void {
				// 增加事件监听等
				login.addEventListener("loginOK",loginOKHandler);
				this.nativeWindow.width=300;
				this.nativeWindow.height=280;
			}
			
			private function loginOKHandler(event:LoginResult):void {
				vwMain.selectedIndex = 1;
				this.nativeWindow.width=280;
				this.nativeWindow.height=500;
			}
		]]>
	</fx:Script>
	<mx:ViewStack id="vwMain">
		<s:NavigatorContent width="100%" height="100%" label="登录">
			<!--<component:cptLogin id="login" loginOK="loginOKHandler()" />-->
			<component:cptLogin id="login"/>
		</s:NavigatorContent>
		
		<s:NavigatorContent width="100%" height="100%" label="主页">
			<component:cptMain id="main" />
		</s:NavigatorContent>
	</mx:ViewStack>
	
</s:WindowedApplication>

Login组件:component/cptLogin.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Panel 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="300" height="280">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	
	<fx:Metadata>
		[Event(name="loginOK", type="events.LoginResult")]
	</fx:Metadata>
	
	<fx:Script>
		<![CDATA[
			import events.LoginResult;
			
			private function toLogin(event:MouseEvent):void {
				var loginOKObject:LoginResult = new LoginResult("loginOK");
				this.dispatchEvent(loginOKObject);
			}
		]]>
	</fx:Script>
	
	<s:Form id="frmLogin" x="0" y="0" width="100%">
		<s:layout>
			<s:FormLayout/>
		</s:layout>
		<s:FormHeading label="用户登录" width="100%"/>
		<s:FormItem label="帐号:" width="100%">
			<s:TextInput id="username" width="200"/>
		</s:FormItem>
		<s:FormItem label="密码:" width="100%">
			<s:TextInput id="password" width="200" displayAsPassword="true"/>		 
		</s:FormItem>
		<s:FormItem label="" width="100%">
			<s:CheckBox id="autoLogin" label="记住密码" selected="true" />	 
		</s:FormItem>
		<s:FormItem label="" width="100%">
			<s:Button id="doLogin" label="登录" click="toLogin(event)"/>		 
		</s:FormItem>
	</s:Form>
</s:Panel>

Main组件:component/cptMain.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Panel 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="280" height="500">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<s:Label text="程序主面板" />
</s:Panel>

自定义事件:events/LoginResult.as:

package events
{
	import flash.events.Event;
	
	public class LoginResult extends Event
	{
		public function LoginResult(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			//TODO: implement function
			super(type, bubbles, cancelable);
		}
	}
}

源码下载







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值