精通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对象,下面就可以为事件编写代码了。
相关文章推荐
- 精通Silverlight——12.1 在x:Class中创建事件处理
- 精通Silverlight——12.2 处理键盘和鼠标事件
- 精通Silverlight——12.3 处理键盘事件
- Silverlight学习笔记一:DataGrid如何处理鼠标的滚轮事件
- 精通Silverlight——12.3.1 添加键盘事件
- 精通Silverlight——12.5.4 添加控件事件
- 4.在JBoss中自己定义JAAS登录模块处理登录事件
- 应用程序按照以下顺序执行由 global.asax 文件中定义的模块或用户代码处理的事件
- Scala类型声明与定义、函数定义、流程控制、异常处理
- 【转】C#中的预定义事件处理机制
- 在C中用struct实现C++中class的函数声明和定义
- Silverlight 鼠标双击事件处理
- 在定义了外部layout的事件后,处理内部所包含的部件的事件时没触发。
- SilverLight学习笔记--Silverligh之在Javascript中捕获和处理Silverlight控件事件
- 精通Silverlight——12.2.4 事件冒泡机制
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- 页面中声明方式定义的用户控件与页面事件的执行顺序
- 一步一步学Silverlight 2系列(6):键盘事件处理
- 一步一步学Silverlight 2系列(4):鼠标事件处理 (转)
- 在C中用struct实现C++中class的函数声明和定义