.NEt专家博客!

【李会军】一步一步学Silverlight 2系列(6):键盘事件处理

上一篇 / 下一篇  2008-04-11 19:23:06

概述

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!_JU A,}&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~0
Stroke="White"StrokeThickness="2"
2U6H#?2aV[0
KeyUp="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,P es3W.P0publicPage()
T$L9i N 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个人空间DU"@ @gR X I
ITPUB个人空间8VS9_Yh^
}ITPUB个人空间?rn,i`wa
}

使用事件参数KeyEventArgs

使用事件参数可以获取到事件数据,可以使用的属性有Key、PlatformKeyCode、Handled、Source。

private voidellipse_KeyUp(objectsender,KeyEventArgse)ITPUB个人空间8fB'Wsfn
{
&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\9Y W0//......
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.?/q0
Canvas.Top="80"Canvas.Left="80"/>
'SBI)pbH)x0<
Buttonx:Name="button"Width="100"Height="40"
~0g q&g%kfsXd)E0
Canvas.Top="80"Canvas.Left="280"ITPUB个人空间\+Y G:BV4G:w#n
Background="Red"Margin="20 0 0 0"Content="Submit"/>
)o b*IIJO!U"K0<
TextBlockx:Name="Status"Foreground="White"Text="Status"ITPUB个人空间\.P;d~slyM t
Canvas.Left="80"Canvas.Top="200"/>ITPUB个人空间I4O tKTK/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.XJ e0}ITPUB个人空间@I1TF/ypZ#w
}

运行程序,当文本框获得焦点并输入t时
4RKC]B`Y0
2D T UIJxz?+P|:z0按钮获得焦点
%Vz Vm2s%|4F0Ti0ITPUB个人空间3].H s$k%oQ

结束语

关于键盘事件都简单的介绍到这儿,希望对大家有用。

作者:TerryLee
B w Bq H X5CQ Z0出处:http://terrylee.cnblogs.com


R m AU-Um-c0


TAG:

引用 删除 Guest   /   2009-11-13 11:36:29
3
引用 删除 Guest   /   2009-09-29 09:27:37
5
sun4818648的个人空间 引用 删除 sun4818648   /   2009-06-02 16:39:16
5
引用 删除 Guest   /   2009-04-25 22:51:21
1
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2012-02-10  
   1234
567891011
12131415161718
19202122232425
26272829   

数据统计

  • 访问量: 665817
  • 日志数: 3733
  • 影音数: 7
  • 文件数: 1
  • 建立时间: 2008-01-04
  • 更新时间: 2010-12-31

RSS订阅

Open Toolbar