.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">
C$K0T5zZ:Q C@/M0<
Ellipsex:Name="ellipse"Width="120"Height="120"Fill="Orange"
AZ"g?'md/GXM0
Canvas.Top="50"Canvas.Left="160"
d1d$fGX;{0
Stroke="White"StrokeThickness="2"
F0N(@/i dl5aE0
KeyUp="ellipse_KeyUp"
'Y5C9aUtE1kBU$u`0
KeyDown="ellipse_KeyDown"/>
+I5[ \c [_P(y0</
Canvas>

或者在代码中注册:

public partial classPage:UserControl
3xi7y,j+G*U0
{
#i/h|NW G b0publicPage()
Q5]1@Lv%wf0{ITPUB个人空间0yf4K-F7?3@ap3k
InitializeComponent();ITPUB个人空间 [:L FkeS
this.ellipse.KeyUp +=newKeyEventHandler(ellipse_KeyUp);
$M'?uq~A2zf0this.ellipse.KeyDown +=newKeyEventHandler(ellipse_KeyDown);
1c1Zc8Xb+T0]T:` b0}ITPUB个人空间$Ej:N BsP

"K4cd @NrB Sd$^0private voidellipse_KeyUp(objectsender,KeyEventArgse)ITPUB个人空间O(G Cf8Z@5s:R
{ITPUB个人空间V5DT0u+]P5~ s$z

z{ e/AY0Lr7_0}ITPUB个人空间;[ M;mT V dh

{ A6`O/x8o0private voidellipse_KeyDown(objectsender,KeyEventArgse)ITPUB个人空间.?i8Wz5Ey
{ITPUB个人空间+I0n-R-LZ
ITPUB个人空间w+})N+{:\Drk0V
}ITPUB个人空间"Q.c/V!]3gYh$L
}

使用事件参数KeyEventArgs

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

private voidellipse_KeyUp(objectsender,KeyEventArgse)
Z4j_u xX0{ITPUB个人空间A7?'?-^]%Y;I
if(e.Key ==Key.R)ITPUB个人空间e7a(E1hd
{
k@6U3uk6z lx0//......
a O,i#PH0v)g0
}ITPUB个人空间o U0h U `kF
else if(e.Key ==Key.Ctrl && e.Key ==Key.U)ITPUB个人空间v'nA2p x+Tz
{ITPUB个人空间0K2j` s0z(q9X5M
//......ITPUB个人空间}D/}u4a
}
aOX0{&h2U!C6PZPy!Ck0}

在事件数据中,Handled有时候非常有用,可以用来判断事件是否已经处理。

键盘路由事件

键盘事件KeyDown和KeyUp都支持路由事件,如下面的示例。

<Canvasx:Name="LayoutRoot"Background="#46461F"KeyUp="LayoutRoot_KeyUp">
!I#|Hyi Ld0<
TextBoxx:Name="textbox"Width="200"Height="40"
-vQ*mh _0
Canvas.Top="80"Canvas.Left="80"/>
D`'dh~&QCuQ0<
Buttonx:Name="button"Width="100"Height="40"ITPUB个人空间2G5e }Hl%L
Canvas.Top="80"Canvas.Left="280"ITPUB个人空间F4o"n2Ad5|
Background="Red"Margin="20 0 0 0"Content="Submit"/>ITPUB个人空间9r e}/|$_ fD
<
TextBlockx:Name="Status"Foreground="White"Text="Status"ITPUB个人空间yqwie f
Canvas.Left="80"Canvas.Top="200"/>ITPUB个人空间RD#Ci!c$H^Y4]-GJ
</
Canvas>

为Canvas注册了一个KeyUp事件,编写事件处理程序。

private voidLayoutRoot_KeyDown(objectsender,KeyEventArgse)
nRh.n+h`)q t0{ITPUB个人空间evH@#voD$[0x;w
if(e.Key !=Key.Unknown)ITPUB个人空间 c fs+dlk
{
0e6Iym/MM0Stringmsg ="The key "+ e.Key.ToString();ITPUB个人空间Wxq j{3V"zys
msg +=" was pressed while focus was on "+ (e.SourceasFrameworkElement).Name;ITPUB个人空间&q3G7x9\HD?D
statusTextBlock.Text = msg;
6r,M6vx+e|`s'y0}
R!KR SL;B `L T0}

运行程序,当文本框获得焦点并输入t时ITPUB个人空间`#`${:G5P.Q*k |

oH m5? Co0按钮获得焦点
7`WPHTar&x|S+X0ITPUB个人空间 R2zXgF.U)g

结束语

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

作者:TerryLee
Bc'chE2jj"x0出处:http://terrylee.cnblogs.com

ITPUB个人空间XdYa0\&Jr


TAG:

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 :( :)

Open Toolbar