zoukankan      html  css  js  c++  java
  • 一步一步学Silverlight 2系列(6):键盘事件处理

    概述

    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_Silverlight2_0037

    按钮获得焦点

    TerryLee_Silverlight2_0038

    结束语

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

    Powered By D&J (URL:http://www.cnblogs.com/Areas/)
  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/Areas/p/2153332.html
Copyright © 2011-2022 走看看