如何样在 x:Class中创建Event Handlers

  介绍

  对于基于Silverligh应用各种事件处理,你有以下几个选择:

  你可以编写JavaScript 事件处理, 它是由 Silverlight browser control来解释运行.

  你可以用针对托管代码动态语言来编写事件处理, 比如象IronPython 或托管 JScript. 这些事件处理机制直到运行时才会被编译. dynamic language runtime (DLR)提供了托管代码支持. 想查看更多详情, 请查阅 如何样使用动态语言来编写Silverlight.

  你可以使用托管 代码 语言 比如 C# 或 Visual Basic. 这些处理将被编译到库中,你可以引用使用这些在XAML中运行处理 .

  本章将介绍上面提到第 3种思路方法.介绍如何使用C# 和 Visual Basic来编写事件处理 , 如何编译它们到assembly里中, 如何样引用XAML中这些事件处理等.

  要求 (请查看Silverlight download site):

  Microsoft Silverlight 1.1 Alpha.

  Microsoft Visual Studio Code Name "Orcas" Beta 1.

  Microsoft Silverlight Tools Alpha for Visual Studio Code Name "Orcas" Beta 1.

  本章假设你已经创建好了个基本Silverlight project. (请查看 如何来创建个Silverlight Project 来获得信息.)

  声明 x:Class, 引用事件 Handler

  个基于 Visual Studio Silverlight 模板project将自动选择个默认, , 和 assembly. x:Class 般都会被附加上了以上值, 所以你可以跳过 step 1 而直接去看下面内容. 但是, 你可能想改变模板给你 , , 和 assembly 名称. 以下内容也将介绍在创建project后如何去更改模板给定默认名称.

  准备 XAML 文件

  打开 Page1.xaml 文件 进行编辑. 在 Canvas 根 element中, 在两行 xmlns 申明下边, 加入条属性,给其命名 x:Class. (这个属性来自 XAML xmlns,这就是为什么前面总有个x: 前缀.)

  要给 x:Class赋值, 你必须提供两个值: 名称 (通常和是相关) 和相应 Unorm Resource Identier (URI). 这个例子使用了 SampleApplication.EventHandlingCanvas来命名, 并为assembly 命名为 SampleApplication.dll. 这里面申明格式为 x:Class 属性值是.;assembly=assemblyUri. 因此, 此例子中,你应该将x:Class 属性值设置如下:

x:Class="clr-:SampleApplication.EventHandlingCanvas;assembly=SilverlightEventHandling.dll" .

  注意

  文件扩展名 (般是 .dll) 是必须, assembly= 值已经不仅仅作为集名称了,它还会作为个 URI来对待.

  选择个事件来处理. 在此例子中, 添加个子Canvas element 到根canvas下, 并对新添加Canvas对象MouseLeftButtonUp 事件进行处理 . 粘贴下面XAML代码到根Canvas 标记中.

  CS

<Canvas Width="100" Height="30" Background="Gray" MouseLeftButtonUp="OnClick">
 <TextBlock>Click me</TextBlock>
</Canvas>


  VB

<Canvas x:Name="Button1" Width="100" Height="30" Background="Gray" MouseLeftButtonUp="OnClick">
 <TextBlock>Click Me</TextBlock>
</Canvas>


  编写个Handler

  所有XAML页中事件处理必须在x:Class中申明和assembly文件中进行编写.

  在托管代码文件中定义事件处理

  打开你Page1.xaml.cs或 你 Page1.xaml.vb 文件进行编辑.

  对于 C#, 该文件已经定义好了命名空间和类.对于Visual Basic, 类已经定义好了, 而命名空间则由该project默认命名空间来指定. (另外要提点是,该文件中会有个 Loaded handler; 尽管在下面举例中并没有出现,但你也不要在你文件中删除这个.)

  如果你后台代码 文件是由模板生成, 你可能会想要更改/ 名称并对 x:Class到 /映射进行特定修改. 下面这个举例, 在你Page1.xaml.cs中代码 文件如果是这个样子(using 等申明已经省略).

SampleApplication
{
  public partial EventHandlingCanvas : Canvas
  {
    public EventHandlingCanvas{}
  }
}


  对于VB, Page1.xaml.vb 内容类似下面.

Partial Public Class Page1
  Inherits Canvas
End Class


  定义这个handler 思路方法,并始其为 EventHandlingCanvas 类成员. 这个 handler 需要使用 sender 参数来包括对添加自己element引用, 然后设置个和原始在XAML中定义某个属性区别值(这儿使用了 SolidColorBrush 来代替在XAML中定义某个属性). ,对于handlers ,我们般设置为私有.

  CS

void _disibledevent= "Clicked..."
End Sub


  note

  If you give the first button the x:Name聽Button1, and the handler implementations are identical in signature as well as in function, you can designate more than one instance to be handled by the same handler, for example: 鈥?Handles Button1.MouseLeftButtonUp, Button2.MouseLeftButtonUp. If you do this, you will also want to remove the MouseLeftButtonUp event attribute from Button1, because now you are declaring the handling in code.

Tags:  怎么样handlers

延伸阅读

最新评论

发表评论