在as中监听自定义事件

场景描述:点击一张图片,响应事件。必须在AS中,去监听事件,并处理事件。

1 自定义了一个事件,如下:

package bridge {
	import flash.events.Event;
	
	import mx.events.FlexEvent;
	
	public class MyEvent extends Event {
		
		public static const myclick:String="myclick";
		
		public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(type, bubbles, cancelable);
		}
	
	}
}

2  监听事件处理的AS类,如下:

package handler
{
	import bridge.MyEvent;
	
	import flash.events.Event;
	
	import mx.controls.Alert;
	
	import skin.ImgHanderSkin;
	
	import spark.components.BorderContainer;
	import spark.components.Image;

	public class ImgHander extends BorderContainer
	{
		
		
		[SkinPart(required="true")]
		public var img:Image;// 打开按钮
		
		public function ImgHander()
		{
			super();
			this.setStyle("skinClass",ImgHanderSkin);
			this.percentHeight=100;
			this.percentWidth=100;
		}
		
		//初始化监听
		override public function initialize():void{
			
			super.initialize();
			img.addEventListener(MyEvent.myclick,SetImgShouZhanUrl);
			
		} 
		
		
		private function SetImgShouZhanUrl(event:Event):void {
			Alert.show("Preview");
		}
		
		
	}
}
3 新建MXML外观,皮肤类,在这里发送自定义事件。(在assert文件夹下有一张图片哦:柯南.jpg)如下:

<?xml version="1.0" encoding="utf-8"?>

<!--

    ADOBE SYSTEMS INCORPORATED
    Copyright 2008 Adobe Systems Incorporated
    All Rights Reserved.

    NOTICE: Adobe permits you to use, modify, and distribute this file
    in accordance with the terms of the license agreement accompanying it.

-->

<!--- The default skin class for a Spark SkinnableContainer container.  

     @see spark.components.SkinnableContainer
        
      @langversion 3.0
      @playerversion Flash 10
      @playerversion AIR 1.5
      @productversion Flex 4
-->
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled="0.5">
    <fx:Metadata>[HostComponent("spark.components.BorderContainer")]</fx:Metadata>

    <fx:Script fb:purpose="styling">
        <![CDATA[         
			import bridge.MyEvent;
            /**
             *  @private
             */
            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
            {
                // Push backgroundColor and backgroundAlpha directly.
                // Handle undefined backgroundColor by hiding the background object.
                if (isNaN(getStyle("backgroundColor")))
                {
                    background.visible = false;
                }
                else
                {
                    background.visible = true;
                    bgFill.color = getStyle("backgroundColor");
                    bgFill.alpha = getStyle("backgroundAlpha");
                }
                
                super.updateDisplayList(unscaledWidth, unscaledHeight);
            }
			
			private function img_mouseOutHandler(event:MouseEvent):void{
			
				// TODO Auto-generated method stub
				var e:MyEvent= new MyEvent(MyEvent.myclick);
				img.dispatchEvent(e);
			
			}
			
			
			
			
        ]]>        
    </fx:Script>
    
    <s:states>
        <s:State name="normal" />
        <s:State name="disabled" />
    </s:states>
    
    <!--- Defines the appearance of the SkinnableContainer class's background. -->
    <s:Rect id="background" left="0" right="0" top="0" bottom="0">
        <s:fill>
            <!--- @private -->
            <s:SolidColor id="bgFill" color="#FFFFFF"/>
        </s:fill>
    </s:Rect>
    
    <!--
        Note: setting the minimum size to 0 here so that changes to the host component's
        size will not be thwarted by this skin part's minimum size.   This is a compromise,
        more about it here: http://bugs.adobe.com/jira/browse/SDK-21143
    -->
    <!--- @copy spark.components.SkinnableContainer#contentGroup -->
    <s:Group id="contentGroup" left="0" right="0" top="0" bottom="0" minWidth="0" minHeight="0">
        <s:layout>
            <s:BasicLayout/>
        </s:layout>
		
		
		<s:Image id="img" click="img_mouseOutHandler(event)" source="assert/柯南.jpg">
			
		</s:Image>
		
		
    </s:Group>

</s:Skin>
4  最后,创建一个MXML应用程序里面,去调用,AS类。直接运行。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   minWidth="955" minHeight="600" 
			   xmlns:handler="handler.*">

	
	<handler:ImgHander>
		
	</handler:ImgHander>
	
	
</s:Application>

结束!

注意:1 发送自定义事件:

var e:MyEvent= new MyEvent(MyEvent.myclick);
img.dispatchEvent(e);
            2  接收并处理事件:

img.addEventListener(MyEvent.myclick,SetImgShouZhanUrl);









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Windows 10 Toast 通知添加一个监听按钮被点击的事件,可以使用 Python winrt 库和 XML 构建器创建一个包含自定义按钮的通知。下面是一个简单的示例代码: ```python import winrt.windows.ui.notifications as notifications import winrt.windows.data.xml.dom as dom # 创建 ToastNotificationManager 对象 toaster = notifications.ToastNotificationManager # 创建 ToastNotification 对象 toast = toaster.get_template_content(notifications.ToastTemplateType.ToastText02) # 获取 Toast 的 XML 节点 xml = dom.XmlDocument() xml.load_xml(toast.get_xml().get_xml()) # 添加一个按钮 actions = xml.getElementsByTagName("actions")[0] action = xml.createElement("action") action.setAttribute("content", "点击这里") action.setAttribute("arguments", "buttonClicked") action.setAttribute("activationType", "background") actions.appendChild(action) # 创建 ToastNotification 对象并显示 toast.add_node(xml) notifier = notifications.ToastNotificationManager.create_toast_notifier() notifier.show(toast) ``` 在上面的代码,我们使用 `ToastNotificationManager` 对象创建了一个基本的 Toast 通知模板。然后,我们使用 `XmlDocument` 对象加载了该模板的 XML,以便能够修改它。我们通过 `getElementsByTagName` 方法获取到了 `actions` 节点,然后创建了一个新的 `action` 节点来表示监听按钮被点击的事件。我们设置了按钮的 `content`、`arguments` 和 `activationType` 属性。最后,我们将修改后的 XML 内容添加回 `ToastNotification` 对象,并使用 `ToastNotificationManager` 创建了一个 `ToastNotifier` 对象并显示了通知。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值