概述
Silverlight 2 Beta
1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#,
IronRuby, Ironpython,对JSON、Web
Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight
2系列》文章带您快速进入Silverlight 2开发。
本文为系列文章第六篇,介绍Silverlight中的键盘处理事件,在Silverlight 2中,支持KeyDown和KeyUp两个事件。
声明事件
所有的事件声明过程都是一样的,在XAML中或者是在代码中进行注册。
<Canvasx:Name="LayoutRoot"Background="#46461F">
2d!_JUA,}&UL#c0<Ellipsex:Name="ellipse"Width="120"Height="120"Fill="Orange"ITPUB个人空间l{ssF+HgOJ-I
|
Canvas.Top="50"Canvas.Left="160"
H*r
?H/{FK*Q1j~0Stroke="White"StrokeThickness="2"
2U6H#?2aV[0KeyUp="ellipse_KeyUp"ITPUB个人空间B+Rh#x s)a;zA |t
KeyDown="ellipse_KeyDown"/>
3R(pz)V.F0</Canvas>
或者在代码中注册:
public partial classPage:UserControl
3~4q*Hl[8[ux0{
x2^S,Pes3W.P0publicPage()
T$L9iN
QhJ'ZO+K&ti0{ITPUB个人空间v"_G-g(O/e
InitializeComponent();ITPUB个人空间uKlWd*i)\,E
this.ellipse.KeyUp +=newKeyEventHandler(ellipse_KeyUp);
B'W8e!A`8L
A |0this.ellipse.KeyDown +=newKeyEventHandler(ellipse_KeyDown);ITPUB个人空间`f{7A1vp&^+C.O9m
}
V\+z-FQ5q.Wue3};t0
MkI q8p0private voidellipse_KeyUp(objectsender,KeyEventArgse)ITPUB个人空间5s8]O]-M1`
{
,Fg]b7h4H.E0ITPUB个人空间4h
e,MM o{%W
}
`.c8t$Sh8r
^-q0
l9~v?(t+h0private voidellipse_KeyDown(objectsender,KeyEventArgse)ITPUB个人空间uxGH"H-W
{ITPUB个人空间D U"@@gR
X
I
ITPUB个人空间8VS9_Yh^
}ITPUB个人空间?rn,i`wa
}
使用事件参数KeyEventArgs
使用事件参数可以获取到事件数据,可以使用的属性有Key、PlatformKeyCode、Handled、Source。
private voidellipse_KeyUp(objectsender,KeyEventArgse)ITPUB个人空间8fB'Wsfn
{
&S'C!s-P:`UW"v(~a0if(e.Key ==Key.R)ITPUB个人空间1pl a4e[_^q
{
)L!T2RI5[?0//......ITPUB个人空间6?-|7u"wAZ,HXz
}ITPUB个人空间m*d2Pa+ls(ZGj
else if(e.Key ==Key.Ctrl && e.Key ==Key.U)ITPUB个人空间 OX`F'y j4ju0D
{
FA
q\9YW0//......
3PDiu$F~-?(T0}ITPUB个人空间*u jC;[A8V;I
}
在事件数据中,Handled有时候非常有用,可以用来判断事件是否已经处理。
键盘路由事件
键盘事件KeyDown和KeyUp都支持路由事件,如下面的示例。
<Canvasx:Name="LayoutRoot"Background="#46461F"KeyUp="LayoutRoot_KeyUp">
q?B_+p:P8Jl"`P0<TextBoxx:Name="textbox"Width="200"Height="40"
#M;oG8Ax6g
kd.?/q0Canvas.Top="80"Canvas.Left="80"/>
'SB I)pbH)x0<Buttonx:Name="button"Width="100"Height="40"
~0g q&g%kfs Xd)E0Canvas.Top="80"Canvas.Left="280"ITPUB个人空间\+Y G:BV4G:w#n
Background="Red"Margin="20 0 0 0"Content="Submit"/>
)ob*IIJO!U"K0<TextBlockx:Name="Status"Foreground="White"Text="Status"ITPUB个人空间\.P;d~slyM t
Canvas.Left="80"Canvas.Top="200"/>ITPUB个人空间I4OtKTK/j*P'b7V(j
</Canvas>
为Canvas注册了一个KeyUp事件,编写事件处理程序。
private voidLayoutRoot_KeyDown(objectsender,KeyEventArgse)ITPUB个人空间`%~K'o n'R4G$Q
{ITPUB个人空间/z~BE GV@
if(e.Key !=Key.Unknown)
y*|C_5}pz
li!Bip(u0{ITPUB个人空间/d,j3D2W `
Stringmsg ="The key "+ e.Key.ToString();
}2Q0Epl\r0msg +=" was pressed while focus was on "+ (e.SourceasFrameworkElement).Name;ITPUB个人空间'V'Q#^Ah
statusTextBlock.Text = msg;
?|Eu;Q.XJe0}ITPUB个人空间@I1TF/ypZ#w
}
运行程序,当文本框获得焦点并输入t时
4RKC]B `Y0
2DT UIJxz?+P|:z0按钮获得焦点
%Vz
Vm2s%|4F0Ti0
ITPUB个人空间3].Hs$k%oQ
结束语
关于键盘事件都简单的介绍到这儿,希望对大家有用。
R mAU-Um-c0