事件侦听@H_502_8@
第二种是使用代码的方法:使用事件侦听把一个事件处理赋给一个事件。您可以安排一段代码“侦听”是否有事件发生。如果发生了,将会进行适当地处理。声明事件处理的主要优势是很容易移除一个事件侦听。不利条件是事件侦听并非自动生成的,特别对于一些有很强的HTML背景的开发人员。但当您第一次使用它,并在程序中使用它根本不困难。
让我们开始一段XAML代码。正如您所见,并没有专门针对单击事件的事件处理属性。好,这有另外一个重要的事件:
Loaded@H_502_8@。一个元素只会触发一次
Loaded@H_502_8@事件,如例5-5,整个XAML文件被完全载入后,我们使用这个事件建立实际的事件侦听。
例5-5
使用事件侦听,XAML
文件(MouseClickListener.xaml
)
<
Canvas
xmlns
=
"http://schemas.microsoft.com/client/2007"
xmlns:x
=
"http://schemas.microsoft.com/winfx/2006/xaml"
Loaded
=
"canvasLoaded">
<
TextBlock
FontFamily
=
"Arial"FontSize="32"Canvas.Left="30"Canvas.Top="20"
Foreground
=
"Black"Text="Silverlight"
x:Name
=
"ClickTarget"/>
</
Canvas
>
但现在对于事件侦听来说,首先你不得不寻找跟事件侦听关联的元素。在例5-5中我们应该注意到,<TextBlock>元素有一个名称属性(准确地说是
x@H_502_8@
:Name@H_502_8@,)。Silverlight的JavaScript API可以通过名称找到相应的元素,实现这个功能您只需要使用findName()方法,它支持XAML文件中的每个元素。
function canvasLoaded(sender,eventArgs) {
var textblock = sender.findName('ClickTarget');
}
1. 事件的名称
textblock.addEventListener(
'MouseLeftButtonDown',mouseClick);
例5-6 使用事件侦听,XAML JavaScript文件(MouseClickListener.xaml.js)
function
canvasLoaded(sender,eventArgs) {
var textblock = sender.findName('ClickTarget');
textblock.addEventListener(
'MouseLeftButtonDown',
mouseClick);
}
function
mouseClick(sender,eventArgs) {
alert('Ouch,says ' + sender.toString() + '“'+sender.name+ '”!');
}
移除事件侦听将会使它被“Mouse Position”的代码段所覆盖。
鼠标事件@H_502_8@
Silverlight 1.0支持5个鼠标事件,其中三个前面已经介绍过:
MouseEnter@H_502_8@
鼠标指针移动到对象显示区域内
MouseLeave@H_502_8@
鼠标指针从对象显示区域离开
MouseMove@H_502_8@
鼠标移动
MouseLeftButtonDown@H_502_8@
鼠标左键按下
MouseLeftButtonUp@H_502_8@
鼠标左键单击并释放
这些事件是自解释的,但应该解释一下
MouseLeftButtonDown@H_502_8@和
MouseLeftButtonUp@H_502_8@之间的不同之处。单用户在某元素上单击鼠标,首先会触发
MouseLeftButtonDown@H_502_8@事件,然后是
MouseLeftButtonUp@H_502_8@事件。所以鼠标单击是在
MouseLeftButtonUp@H_502_8@事件被触发之后才完成。实际上它们之间只有在一种情况下才会有区别:用户把鼠标指针移动到元素之上,按下鼠标按钮不放,再次移动鼠标离开元素。当您使用
MouseLeftButtonUp@H_502_8@事件,它将不会被触发,这符合一些场影的需要(如按钮事件),但不符合别一些场影的需要(如鼠标拖动)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。