• 一步一步学Silverlight 2系列(6):键盘事件处理


    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terrylee.blog.51cto.com/342737/67225

    概述

    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中或者是在代码中进行注册。
    <Canvas x:Name="LayoutRoot" Background="#46461F">
                <Ellipse x:Name="ellipse" Width="120" Height="120" Fill="Orange"
                Canvas.Top="50" Canvas.Left="160"
                Stroke="White" StrokeThickness="2"
                KeyUp="ellipse_KeyUp"
                KeyDown="ellipse_KeyDown"/>
                </Canvas>
    或者在代码中注册:
    public partial class Page : UserControl
                {
                public Page()
                {
                InitializeComponent();
                this.ellipse.KeyUp += new KeyEventHandler(ellipse_KeyUp);
                this.ellipse.KeyDown += new KeyEventHandler(ellipse_KeyDown);
                }
                private void ellipse_KeyUp(object sender, KeyEventArgs e)
                {
                }
                private void ellipse_KeyDown(object sender, KeyEventArgs e)
                {
                }
                }

    使用事件参数KeyEventArgs

    使用事件参数可以获取到事件数据,可以使用的属性有Key、PlatformKeyCode、Handled、Source。
    private void ellipse_KeyUp(object sender, KeyEventArgs e)
                {
                if (e.Key == Key.R)
                {
                //......
                }
                else if(e.Key == Key.Ctrl && e.Key == Key.U)
                {
                //......
                }
                }
    在事件数据中,Handled有时候非常有用,可以用来判断事件是否已经处理。

    键盘路由事件

    键盘事件KeyDown和KeyUp都支持路由事件,如下面的示例。
    <Canvas x:Name="LayoutRoot" Background="#46461F" KeyUp="LayoutRoot_KeyUp">
                <TextBox x:Name="textbox" Width="200" Height="40"
                Canvas.Top="80" Canvas.Left="80"/>
                <Button x:Name="button" Width="100" Height="40"
                Canvas.Top="80" Canvas.Left="280"
                Background="Red" Margin="20 0 0 0" Content="Submit"/>
                <TextBlock x:Name="Status" Foreground="White"  Text="Status"
                Canvas.Left="80" Canvas.Top="200"/>
                </Canvas>
    为Canvas注册了一个KeyUp事件,编写事件处理程序。
    private void LayoutRoot_KeyDown(object sender, KeyEventArgs e)
                {
                if (e.Key != Key.Unknown)
                {
                String msg = "The key " + e.Key.ToString();
                msg += " was pressed while focus was on " + (e.Source as FrameworkElement).Name;
                statusTextBlock.Text = msg;
                }
                }
    运行程序,当文本框获得焦点并输入t时
     
    按钮获得焦点
     

    结束语

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

    本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67225

  • 相关阅读:
    Mysql 一次性备份导出/导入恢复所有数据库
    MySQL数据备份之mysqldump使用
    mysql数据库误删除后的数据恢复操作说明
    Qt的模态对话框和非模态对话框 经常使用setAttribute (Qt::WA_DeleteOnClose)
    Qt paintEvent绘制窗体 注意Qt::WA_PaintOutsidePaintEvent 只是适用于X11,其他系统均无效
    Building PySide on Microsoft Windows
    浅议Delphi中的Windows API调用(举的两个例子分别是String和API,都不错,挺具有代表性)
    Qt多线程学习-用例子来理解多线程
    Nutch之简介与安装
    RPC框架实现
  • 原文地址:https://www.cnblogs.com/hdjjun/p/1361504.html
Copyright © 2020-2023  润新知