精通Silverlight——12.1.1 声明 x:Class, 定义事件处理

本文介绍Silverlight中如何声明x:Class及定义事件处理程序,包括Page_Loaded事件、InitializeComponent方法的作用,以及如何通过XAML和后置代码为UI元素添加事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

精通Silverlight——12.1.1  声明 x:Class, 定义事件处理

使用VS2008创建Silverlight项目时,x:Class自动被指定为:项目名称.Page,程序集被指定为ClientBin/项目名称.dll,通常不需要更改默认的设置。

Loaded属性指定了Page类的Loaded事件名称,在后置代码中,自动创建了一个Page_Loaded事件名称,与Loaded的属性设置相对应,如下所示。

public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

        }

Loaded属性与x:Class不同的是,Loaded不一定非要定义在XAML中。下面的代码为Page类添加了一个构造函数,并将Loaded事件关联到Page_Loaded

        public Page()

        {

            this.Loaded+=new EventHandler(Page_Loaded);

        }

        public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

        }

如果需要为其他图形对象添加事件,比如鼠标移动,键盘输入时,一般建议的作法是在Page_Load中添加事件订阅代码。

例如在画布中,声明一个矩形,代码如下所示。

  <Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100" x:Name="Rec1"></Rectangle>

注意:必须指定x:Name属性,以便于在代码文件中直接访问,为了给这个矩形添加事件,通常是在Page_Load区的InitializeComponent方法的下面添加事件订阅代码,可借助于VS2008的智能感知功能。

有时候可能智能感知功能并不能立刻反映出在XAML文件中所做的变化,可以通过全部保存或者编译一次来获得智能感知。

Page_Loaded区中,借助于智能提示功能,添加如下的代码框架。

       public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

            Rec1.MouseEnter += new MouseEventHandler(Rec1_MouseEnter);

        }

        void Rec1_MouseEnter(object sender, MouseEventArgs e)

        {

            //在这里将要添加代码

        }

可以在出现如图12.1所示的提示时按两下Tab键,由VS2008来自动生成代码框架。

12.1  VS2008智能完成

当然还可以直接在XAML中添加事件,如下面的代码所示。

<Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100" x:Name="Rec1" MouseEnter="MouseEnter"></Rectangle>

这样就不必再在Page_Loaded中订阅事件了。

注意Page_Loaded事件中的InitializeComponent方法,与ASP.NET项目一样,当在XAML中添加新对象后,在该方法中就会用.NET语法定义这些对象,以便于开发人员直接在后置代码中访问。

如果按F12键追踪该方法,会看到刚刚定义的Rec1原来是定义在InitializeComponent方法中,并且使用了如下的代码。

  Rectangle Rec1;

    private void InitializeComponent()

    {

      Rec1= this.FindName("Rec1") as Rectangle;

     

    }

这段代码的意思是在根画布中,也就是Page类中,查找名为Rec1的对象,并转换为Rectangle。这样在代码文件中就可以直接使用Rec1了。

必须注意的是,InitializeComponent方法被定义在名为Page.g.cs文件中,该文件会感知在XAML中所做的变更,并自动进行更新。而且在Page.g.cs也是一个局部类,最后都将被编译到Page类中。

有了事件和代码框架,也具有了可以直接引用的XAML对象,下面就可以为事件编写代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值