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中省略了该逻辑。
  需要添加的代码如下:

  public event RoutedEventHandler Click;   //在前面声明
  this.MouseLeftButtonUp += new MouseButtonEventHandler(SimpleButton_MouseLeftButtonUp); //添加到构造函数中
  void SimpleButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
   {
       
if (Click != null)
          Click(
thisnew RoutedEventArgs());
   }

 

 完整代码如下:

Code

 

2、测试事件响应
要测试 Click 事件,我们需要回到MySLbutton项目,修改 Page.xaml 中的控件声明,如下所示:

        <custom:MySilverButton x:Name="MyFirstSLbutton" Click="MyFirstSLbutton_Click">
        
</custom:MySilverButton>

然后在 Page.xaml.cs 中编写MyFirstSLbutton_Click事件处理程序,代码如下:

        private void MyFirstSLbutton_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Browser.HtmlPage.Window.Alert(
"Click事件生效!");
        }

 

生成项目后运行,现在,单击 Button 应生成一个包含单词“Click事件生效!”的警告框 — 证明已引发并正确处理了此事件:
下一篇:
SilverLight学习笔记--建立Silverlight自定义控件(3)--操作控件内部成员 前往:Silverlight学习笔记清单
posted @ 2009-07-17 10:39  wsdj  阅读(2985)  评论(0编辑  收藏  举报