UWP 虽然主要面向触控操作,但 Windows 设备是万能工具,不用手指不用笔的时候,也可能会接上键盘耍耍。因此,给应用界面上的一些元素弄个快捷访问键也挺不错的。为了使用 Windows 上的各类应用具备统一性,UWP 应用的快捷访问键延续了传统,激活方法也是先按 Alt 键,然后在不松开 Alt 键的前提下再按访问键。

咱们先用一个示例来表演一下。

下面 XAML 声明了一个按钮,并设置了访问键。

 <Button Content="Update" Click="OnUpdate" AccessKey="U"/>

访问键多用于按钮和菜单项,因此使用按钮时,访问键被激活后,会关联地自动引发 Click 事件。

下面我们处理一下 Click 事件,弹一个对话框。

        private async void OnUpdate(object sender, RoutedEventArgs e)
{
messageDlg.Content = "Update 按钮被激活。";
await messageDlg.ShowAsync();
}

现在这个访问键就能使用了。运行程序,然后按 Alt + U ,就能看到如下图所示的效果了。

按钮比较特殊,访问键激活时会自动与 Click 事件关联,可是,对于一般的 UI 元素就不行了。比如

<Rectangle Fill="Red" Height="30" Width="100" HorizontalAlignment="Left" AccessKey="R"/>

对于以上矩形,按下 Alt + R 系统是无法判断其要完成的行为的,那要是我真想让这个矩形也能响应访问键,怎么弄? 这时候就要处理 AccessKeyInvoked 事件,当访问键被正确识别,就会引发这个事件,我们可以处理这个事件,然后写上自己的代码。

比如我这里,同样是弹出对话框。

 <Rectangle Fill="Red" …… AccessKey="R" AccessKeyInvoked="Rectangle_AccessKeyInvoked" />

下面是事件处理代码。

        private async void Rectangle_AccessKeyInvoked(UIElement sender, AccessKeyInvokedEventArgs args)
{
messageDlg.Content = "这是红色矩形。";
await messageDlg.ShowAsync();
}

运行程序后,按 Alt + R,就会引发事件了。如下图

要想显示访问键提示,只需按一下 Alt 键即可,如下图。

有大伙伴会说,我要是不想用系统默认的访问键提示呢,我想自己处理。

当然是可以的,首先,你得在代码里面执行这一行代码。

 Windows.UI.Xaml.Input.AccessKeyManager.AreKeyTipsEnabled = false;

这样,默认的显示提示就被禁用了。

然后,你要处理两个事件:

AccessKeyDisplayRequested ——当要显示访问键提示时,引发该事件,这时候可以添加你的处理代码,向用户显示访问键提示。

AccessKeyDisplayDismissed—— 当提示要关闭(消失)时引发,在此事件中,你要用你的代码来隐藏访问键提示。

来,我们改改上面的矩形。

            <Rectangle Fill="Red" Height="30" Width="100" HorizontalAlignment="Left" AccessKey="R" AccessKeyInvoked="Rectangle_AccessKeyInvoked" Margin="0,13"
AccessKeyDisplayRequested
="OnAccessKeyDisplayReq"
AccessKeyDisplayDismissed
="OnAccessKeyDisplayDism">
<Rectangle.ContextFlyout>
<Flyout Placement="Bottom">
<Flyout.Content>
<TextBlock FontSize="16" Foreground="Red"/>
</Flyout.Content>
</Flyout>
</Rectangle.ContextFlyout>
</Rectangle>

我选用了一个 Flyout 类来显示提示。

下面是处理事件代码。

        private void OnAccessKeyDisplayReq(UIElement sender, AccessKeyDisplayRequestedEventArgs args)
{
FrameworkElement ele = sender as FrameworkElement;
Flyout fly = ele.ContextFlyout as Flyout; TextBlock tb = fly.Content as TextBlock;
tb.Text = $"请按【Alt + {ele.AccessKey}】键";
fly.ShowAt(ele);
} private void OnAccessKeyDisplayDism(UIElement sender, AccessKeyDisplayDismissedEventArgs args)
{
FrameworkElement ele = sender as FrameworkElement;
Flyout fl = ele.ContextFlyout as Flyout;
fl.Hide();
}

好,现在再次运行,然后按一下 Alt 键。效果如图。

好了,今天的话题就聊到这里吧,老周也饿了,该填填肚子了。

本文示例代码下载地址

【Windows 10 应用开发】使用快捷访问键的更多相关文章

  1. Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建

    目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ...

  2. 打造理想的Windows 10 APP开发环境的5个步骤

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软即将发布Windows 10手机版,实际上很多人现在已经开始在开发Windows ...

  3. 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引

    [源码下载] 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引 作者:webabcd 介绍背水一战 Windows 10 之 文件系 ...

  4. Windows 10 UWP开发:如何去掉ListView默认的选中效果

    原文:Windows 10 UWP开发:如何去掉ListView默认的选中效果 开发UWP的时候,很多人会碰到一个问题,就是ListView在被数据绑定之后经常有个默认选中的效果,就像这样: 而且它不 ...

  5. 【Windows 10 应用开发】自定义快捷键

    上一篇鸟文中,老周通过史无前例的代码向各位 demo 了访问键的用法(即 Alt + 某某).不过,大伙伴们一定会发现,访问键毕竟限制较大,不太灵活,也不好发挥,于是就需要自定义快捷键了. 其实,自定 ...

  6. Windows 10开启默认网络驱动器访问

    在Windows 10的系统策略中,驱动器盘符的网络访问是默认关闭的,用管理员权限打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...

  7. 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用

    今天是大年初二,都去走亲戚了吧,享受一下这难得的能和亲友相聚的时光.而我就不一样了,今天一回到家就又开始瞎折腾了,哈哈哈. 问题背景 最近花了点时间用 ASP.NET Core 2 写了个个人博客,中 ...

  8. 张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号

    考虑到 Raspberry Pi 读取模拟信号是很烦人的事情,更何况是在没人玩的 Windows 10 IoT 下,所以准备正儿八经的写点东西. 需求:使用 Raspberry Pi 读取输出模拟信号 ...

  9. 张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED

    感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧.其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊.百度也搜不 ...

随机推荐

  1. Java基础语法(一)<注释,关键字,常量,变量,数据类型,标识符,数据类型转换>

    从今天开始,记录学习Java的过程.要学习Java首先得有环境,至于环境的安装我就不说了,百度有很多教程,比如:http://jingyan.baidu.com/article/20095761904 ...

  2. 让Dev C++支持C++11

    打开编译选项

  3. jquery.uploadifive 解决上传限制图片或文件大小

    dotNet疯狂之路No.28  今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,只有那些真正的英雄才能见到后天的太阳.  We're here to put a dent in t ...

  4. 非学习型单层感知机的java实现(日志三)

    要求如下: 所以当神经元输出函数选择在硬极函数的时候,如果想分成上面的四个类型,则必须要2个神经元,其实至于所有的分类问题,n个神经元则可以分成2的n次方类型. 又前一节所证明出来的关系有: 从而算出 ...

  5. 用ajax判断用户是否已存在?----2017-05-12

    首先在用ajax之前,先说一下JSON: JSON:javascript object notation   js对象标记 对于json,我们只需要知道如何定义json?如何输出?怎么遍历? 1.定义 ...

  6. poj3067 Japan 树状数组求逆序对

    题目链接:http://poj.org/problem?id=3067 题目就是让我们求连线后交点的个数 很容易想到将左端点从小到大排序,如果左端点相同则右端点从小到大排序 那么答案即为逆序对的个数 ...

  7. redis连接池的使用方法

    所需jar:jedis-2.8.0.jar和commons-pool-2-2.3jar Jedis操作步骤如下:1->获取Jedis实例需要从JedisPool中获取:2->用完Jedis ...

  8. Memcached for windows x64 x32 安装

    Memcached for windows 一.安装Memcached 1.下载 Memcached32位:http://s3.amazonaws.com/downloads.northscale.c ...

  9. 让人恼火的经历——手机H5网页被注入广告

    你的网站是否在尾部出现了让人恼火的广告? 这次我算是遇到了这些流氓的广告.那么就让我们一步步攻克这些恼火的广告吧. 问题描述 某一天下午开始,我们制作的网站就开始被各种广告注入,类似上图这种. 还有在 ...

  10. PHP导出生成CSV文件

    composer 用起来是非常方便的 所以我是依赖composer来做的包管理 1.先安装composer 自行百度一下composer安装以及使用 2.用composer下载安装office包即可 ...