SilverLight学习笔记--建立Silverlight自定义控件(2)--事件响应
设计完了自定义控件的外观,接下来我们要设计自定义控件的事件响应,在本例中我们添加此控件的Click事件。
1、添加事件
实现 Silverlight 控件中的事件通常与实现普通的 Microsoft® .NET Framework 类中的事件一样:您只需声明控件类中的事件,然后编写代码引发这些事件。
但是与 Silverlight 中事件引发稍有不同的一点是:Silverlight 支持路由事件。在 Siverlight 中,事件只能向上传递,即“冒泡”操作。路由事件由 RoutedEventHandler 委托定义,并且路由事件处理程序接收 RoutedEventArgs 对象,该对象包含用于确认引发此事件的对象的 Source 属性(如果此事件最初由可视树中的深层对象引发,则该属性不同于传递给事件处理程序的发送者参数)。内置 Button 控件的 Click 事件是一个路由事件,因此 SimpleButton 的 Click 事件也应该是路由事件。
显示了为引发路由 Click 事件,必须对 MySilverButton.cs 中的控件类做修改。现在,我们要在MySilverButton的构造函数中为 MouseLeftButtonUp 事件注册一个处理程序。如果至少存在一个注册的侦听器,则此处理程序就可以引发 Click 事件。如果 button-down 事件先于 button-up 事件,则传统的按钮控件只能引发 Click 事件。为使源代码尽可能简单,MySilverButton中省略了该逻辑。
需要添加的代码如下:
this.MouseLeftButtonUp += new MouseButtonEventHandler(SimpleButton_MouseLeftButtonUp); //添加到构造函数中
void SimpleButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (Click != null)
Click(this, new RoutedEventArgs());
}
完整代码如下:
2、测试事件响应
要测试 Click 事件,我们需要回到MySLbutton项目,修改 Page.xaml 中的控件声明,如下所示:
</custom:MySilverButton>
然后在 Page.xaml.cs 中编写MyFirstSLbutton_Click事件处理程序,代码如下:
{
System.Windows.Browser.HtmlPage.Window.Alert("Click事件生效!");
}
生成项目后运行,现在,单击 Button 应生成一个包含单词“Click事件生效!”的警告框 — 证明已引发并正确处理了此事件:
下一篇:
SilverLight学习笔记--建立Silverlight自定义控件(3)--操作控件内部成员 前往:Silverlight学习笔记清单