我们可以在Silverlight中捕获和处理DOM元素的事件,在Silverlight中编写其事件处理代码,从而实现由DOM元素激活,在Silverlight中处理的目的。
还是按惯例,先新建一个Silverlight应用程序,命名为:SLHandleDOMevent。如图:
程序用户界面如下:
我们要创建两个控件,一个是Silverlight控件,它是一个椭圆。一个是 HTML控件,它是一个按钮。
我们要实现的功能是,当点击HTML控件控件时,将激发它的 Onclick事件,在此,我们做了两方面处理:
一方面:是在javascript端编写它的 Onclick事件处理函数,执行结果是跳出一个"在Javascript中响应事件!"的信息提示。
另一方面:在Silverlight中编写的Onclick事件处理函数,执行结果是改变Silverlight那个椭圆控件的颜色和大小,并跳出"Silverlight 成功响应DOM事件!"提示信息。
你将会看到,两个事件处理函数均执行了,并且javascript事件处理函数执行在先。
具体步骤:
一、创建HTML按钮和它的Onclick事件的javascript处理函数。
SLHandleDOMeventTestPage.aspx 界面代码如下:
<% @ Register Assembly = " System.Web.Silverlight " Namespace = " System.Web.UI.SilverlightControls "
TagPrefix = " asp " %>
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " style = " height:100%; " >
< head runat = " server " >
< title > SLHandleDOMevent </ title >
< script type = " text/javascript " >
// 用javascript定义的事件处理函数
function jsClick()
{
alert( " 在Javascript中响应事件! " );
// 在此可以添加事件处理代码
}
</ script >
</ head >
< body style = " height:100%;margin:0; " >
< form id = " form1 " runat = " server " style = " height:100%; " >
< asp:ScriptManager ID = " ScriptManager1 " runat = " server " ></ asp:ScriptManager >
< div style = " height:100%; " >
< input type = " button " id = " myButton " value = " 点击后Silverlight控件将改变 " onclick = " jsClick() "
style = " border-style: none; border-color: inherit; border-width: 20; height:34px; width:379px; font-size:x-large; font-weight:bold; " />
< asp:Silverlight ID = " Xaml1 " runat = " server " Source = " ~/ClientBin/SLHandleDOMevent.xap " MinimumVersion = " 2.0.31005.0 " Width = " 100% " Height = " 50% " />
</ div >
</ form >
</ body >
</ html >
二、创建Silverlight界面并在Silverlight中捕获和处理DOM事件
1、界面创建,Page.xaml代码如下:
xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x = " http://schemas.microsoft.com/winfx/2006/xaml "
Width = " 400 " Height = " 300 " >
< Grid x:Name = " LayoutRoot " Background = " White " >
< Ellipse x:Name = " mySLEllipse " Width = " 300 " Height = " 200 " Fill = " Green " ></ Ellipse >
</ Grid >
</ UserControl >
2、定义Silverlight事件处理函数 MySLbtnHandler,代码如下:
{
// 改变Silverlight控件的颜色
SolidColorBrush mySolidColorBrush = new SolidColorBrush(); // 定义一个SolidColorBrush
mySolidColorBrush.Color = Colors.Orange;
this .mySLEllipse.Fill = mySolidColorBrush;
// 改变Silverlight控件的尺寸
this .mySLEllipse.Width = 300 ;
this .mySLEllipse.Height = 250 ;
MessageBox.Show( " Silverlight 成功响应DOM事件! " );
}
3、在Silverlight中获取DOM元素
HtmlElement btnElement = HtmlPage.Document.GetElementById( " myButton " );
4、指派Silverlight事件处理函数 MySLbtnHandler给DOM元素的 Onclick事件。
btnElement.AttachEvent( " onclick " , (EventHandler)MySLbtnHandler);
Silverlight的Page.xaml.cs后台代码如下:
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Browser; // 此入此命名空间
namespace SLHandleDOMevent
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
Loaded += new RoutedEventHandler(Page_Loaded);
}
private void Page_Loaded( object sender, RoutedEventArgs e)
{
// 获取DOM中的指定元素(在此处我们是获取一个按钮)
HtmlElement btnElement = HtmlPage.Document.GetElementById( " myButton " );
// 指派Silverligth一个事件处理函数给DOM元素的某个事件
btnElement.AttachEvent( " onclick " , (EventHandler)MySLbtnHandler);
}
void MySLbtnHandler( object sender, EventArgs e)
{
// 改变Silverlight控件的颜色
SolidColorBrush mySolidColorBrush = new SolidColorBrush(); // 定义一个SolidColorBrush
mySolidColorBrush.Color = Colors.Orange;
this .mySLEllipse.Fill = mySolidColorBrush;
// 改变Silverlight控件的尺寸
this .mySLEllipse.Width = 300 ;
this .mySLEllipse.Height = 250 ;
MessageBox.Show( " Silverlight 成功响应DOM事件! " );
}
}
}
执行效果如图:
第一步:
第二步:
第三步:
前往:Silverlight学习笔记清单
(转载本文请注明出处)