Silverlight事件机制

日期:2007-12-20   作者:由灵 

        在本章里,由灵会为您介绍Silverlight的事件相关知识和实例。Silverlight使用了事件冒泡的机制,和Web中的JavaScript事件是一样!每一个控件都可以有自己独有的事件,本文会为大家介绍常用控件的事件。
 先简单介绍下事件冒泡机制,理解的朋友要以先跳过此节。Silverlight是使用控件套用控件实现的,比如一个button必须在Canvas容器控件内,所以在点击Button的时候,如果Canvas指定了MouseLeftButtonDown事件,会先执行Button的MouseLeftButtonDown事件,随后执行Canvas的MouseLeftButtonDown事件。
常规事件的绑定有三种方法可以实现,在此为大家介绍。

 1、在XAML的控件标记中添加属性制定,以属性="事件的执行名称"。
  <Canvas onLeftButtonDown="leftButtonDown"></Canvas>
 2、使用JavaScript的指定。。
  _silverlight_control.content.findName("controlName").addEventListener("onLeftButtonDown",functionName);
 3、使用MSIL的DLL中绑定(只限于Silverlight1.1以上版本)。。
  silverlight_control.MouseLeftButtonDown += new System.Windows.Input.MouseEventHandler(silverlight_control_MouseLeftButtonDown);
您可以自定义事件方法,如果想在JavaScript中使用.cs或.vb中声明托管事件,必须要使用Scriptable标记声明。

下面我们列出常用的事件列表:
事件名称 所在控件 说明。

事件名称所在控件说明
LoadedUIElement基类子控件加载后发生
OnResizeSystem.Windows.Interop.BrowserHost静态方法,大小重设是发生
OnFullScreenChangeSystem.Windows.Interop.BrowserHost静态方法,全屏改变时发生
MouseLeftButtonDownUIElement基类鼠标点击发生
MouseLeftButtonUpUIElement基类鼠标放开时发生
MouseLeaveUIElement基类鼠标移开时发生
MouseEnterUIElement基类鼠标经过时发生
DownloadProgressChangedImage, Downloader, MediaElement进度更改时发生
GotFocusUIElement基类获得焦点时发生
LostFocusUIElement基类失去焦点时发生
ImageFailedImage图像失败时发生
BufferingProgressChangedMediaElement缓冲更改时发生
CurrentStateChangedMediaElement播放状态更改时发生
MediaEndedMediaElement播放停止时发生
MediaFailedMediaElement播放失败时发生
MediaOpenedMediaElementss打开以后发生
KeyDownUIElement基类键盘按下时发生
KeyUpUIElement基类键盘起来时发生
CompletedStoryboard播放完时发生
实例:
C#
   [Scriptable]
public partial class Page : Canvas
{
         public Page()
         {
              this.Loaded += this.Page_Loaded;
     }
private void Page_Loaded(object sender, EventArgs args)
         {
            InitializeComponent();
            Storyboard1.Completed += new EventHandler(Storyboard1_Completed);
            WebApplication.Current.RegisterScriptableObject("Page",this);
         }
                  [Scriptable]
public event EventHandler eventName;
}
调用:
window.onload = function() {
         var silverlightControl = document.getElementById(controlID);
         if (silverlightControl)
              silverlightControl.focus();
         silverlightControl.content.Page.Finish=window.finish_handler;  // 绑定
     }
     window.finish_handler=function(sender,args)                   // 使用C#调用此方法,激活按钮
     {
         document.getElementById('RePlay').style.display='inline';
}
本实例是一个事件交互的程序,首选用Blend在Xaml中制做出一个动画Storyboard的实例对象。使用程序声明事件,并用Javascript调用事件委托。虽然可以在JavaScript中直接使用Storyboard. Completed实现,但在此实现JavaScript与C#事件托管实现!
效果如下:

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值