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(
this new  RoutedEventArgs());
   }

 

 完整代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace MyDesignButton
{
    
public class MySilverButton: ContentControl 
    {
        
public event RoutedEventHandler Click; //添加Click事件

        
public MySilverButton()
        {
            
this.DefaultStyleKey = typeof(MySilverButton);

            
this.MouseLeftButtonUp += new MouseButtonEventHandler(SimpleButton_MouseLeftButtonUp); //添加Click事件

        }

        
//添加Click事件
        void SimpleButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            
if (Click != null)
                Click(
thisnew RoutedEventArgs());
        }
    }
}

 

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学习笔记清单

转载于:https://www.cnblogs.com/wsdj-ITtech/archive/2009/07/17/1525403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值