日期: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的指定。。
<Canvas onLeftButtonDown="leftButtonDown"></Canvas>
_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';
}
效果如下: