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 键。效果如图。

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

本文示例代码下载地址

转载于:https://www.cnblogs.com/tcjiaan/p/7019369.html

【Windows 10 应用开发】使用快捷访问键相关推荐

  1. 张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器

    张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器 原文:张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器 BH1750FVI 是一款 ...

  2. 张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231

    原文:张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231 GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/ ...

  3. 【Windows 10 应用开发】细说文本资源文件(resw)

    原文:[Windows 10 应用开发]细说文本资源文件(resw) 最近,小戏骨版<红楼梦>很是火热,老周一口气看完了9集,一直看到 Surface 的风扇呼呼响.林黛玉和薛宝钗这两个角 ...

  4. 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)运行的是 ...

  5. Windows 10 屏幕亮度调节快捷方法

    Windows 10系统亮度一直不知道怎么调节,网上的教程很杂并且大多无用,更改注册表内容也没效果.最后问我一个好朋友,找到了调节亮度的快捷方法(本人台式机). 1.Windows 10 系统 右击 ...

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

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

  7. 20211231 使用windows 10代理时,快捷设置“手动设置代理”的“不使用代理”条目

    step 1. 新建一个txt: step 2. 把下面内容复制到txt: @echo off reg add "HKCU\Software\Microsoft\Windows\Curren ...

  8. Windows 10驱动开发入门(一):环境搭建

    驱动的开发对于初学者来说是不友好的,我们不知道怎么入手,从哪里入门.对于初学者来说束手无策,特别是碰到一个很简单的问题,都不知道怎么解决,这一系列的教程,就是用来排除这些障碍. 大部分的驱动开发教程都 ...

  9. Windows 10 UWP开发:如何不让界面卡死

    http://edi.wang/post/2016/2/18/windows-10-uwp-async-await-ui-thread 关于UI线程 这里我们需要一点关于 UI 线程模型的概念,简单的 ...

最新文章

  1. 用户画像技术及方法论
  2. PPT文字怎样规划 哪里可以代做PPT
  3. oracle数据库可以存图片吗,如何往数据库(Oracle)里存储图片和文件
  4. phonegap一些事件
  5. 给定2个字符串,如何计算变化(插入、删除、替换)?【levenshtein distance 算法】
  6. STM32 进阶教程 8 - 位带操作
  7. Spring基础知识及入门
  8. 网站开发技巧参考大全
  9. mi max android 8.1,小米这款手机可以升级安卓 8.1 了!
  10. 刘知远老师为你解读:自然语言理解到底难在哪儿?
  11. 人用药品注册技术规定国际协调会议(ICH)
  12. (十)统计表速查(标准正态分布、t分布、卡方分布)
  13. LintCode-颜色分类
  14. android qq 文件怎么打开,如何更改腾讯QQ手机版默认的文件打开方式
  15. 订单下单成功后如何等待支付成功
  16. mysql 8.XXX zip版的安装使用
  17. node基础知识部分小记
  18. linux meld 编译,Linux 系统上的可视化比较与合并工具 Meld
  19. Linux 配置iSCSI Initiator
  20. poj 1659 Havel-hakimi定理

热门文章

  1. 结构体:求最高分和最低分
  2. 批处理以当前时间为文件名创建文件
  3. 【C/C++多线程编程之八】pthread条件变量
  4. 自己动手利用KVM和Intel VT实现简单虚拟机
  5. 必须知道的八大种排序算法【java实现】
  6. 一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)
  7. Android的服务(Service)(三)Service客户端的绑定与跨进程
  8. python怎么安装turtle_Python3.6安装turtle模块
  9. java 微信转账 ca_error_C#关于微信红包开发问题:CA证书出错,请登录微信支付商户平台下载证书...
  10. dubbo protocol port 消费者端_springboot整合dubbo设置全局唯一ID进行日志追踪