您的位置:首页 > 其它

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

2008-04-24 15:45 459 查看

精通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对象,下面就可以为事件编写代码了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: