[url=http://www.wpfhome.com/help/default.aspx?id=15]演示+图文+源码下载链接之[/url]:http://www.wpfhome.com/help/default.aspx?id=15
日期: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标记声明。 

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

事件名称 所在控件 说明 
Loaded UIElement基类 子控件加载后发生 
OnResize System.Windows.Interop.BrowserHost 静态方法,大小重设是发生 
OnFullScreenChange System.Windows.Interop.BrowserHost 静态方法,全屏改变时发生 
MouseLeftButtonDown UIElement基类 鼠标点击发生 
MouseLeftButtonUp UIElement基类 鼠标放开时发生 
MouseLeave UIElement基类 鼠标移开时发生 
MouseEnter UIElement基类 鼠标经过时发生 
DownloadProgressChanged Image, Downloader, MediaElement 进度更改时发生 
GotFocus UIElement基类 获得焦点时发生 
LostFocus UIElement基类 失去焦点时发生 
ImageFailed Image 图像失败时发生 
BufferingProgressChanged MediaElement 缓冲更改时发生 
CurrentStateChanged MediaElement 播放状态更改时发生 
MediaEnded MediaElement 播放停止时发生 
MediaFailed MediaElement 播放失败时发生 
MediaOpened MediaElementss 打开以后发生 
KeyDown UIElement基类 键盘按下时发生 
KeyUp UIElement基类 键盘起来时发生 
Completed Storyboard 播放完时发生 

实例:

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#事件托管实现!