爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

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

      首页 知识中心 软件开发 文章详情页

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

      2024-05-28 09:01:53 阅读次数:43

      UWP

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

      其实,自定义快捷键也不是什么很玄的东西,向来不喜欢故弄玄虚,说白了嘛,就是对键盘事件的处理。UWP 与 WPF 有相似处,但也有差异。这些差异是不影响咱们编程的,要是有些差异你就觉得有困难了,那证明你的编程水平实在太差,赶紧回家给党组织写 10 份 800000 字的检讨。

      既然是键盘事件了,你首先闭上眼睛,一边养神一边想想,键盘事件会涉及到什么关联的数据呢。首先,程序必须知道哪个键被操作了,是吧,而每个键都有内置的码位的,如虚键码,这个好办,Windows.System.VirtualKey 枚举已经为我们定义好了,所以这个你不必烦心;接着,我们会想到,一个键会有啥操作呢?是了,无非就是按下和松开,即 Key Down和Key Up。

      只要以上问题你想通了,那事情就很好弄了,比吃栗子还简单。

      UWP的SDK 给我们准备了两个键盘事件:KeyDown在键被按下时发生,KeyUp在键弹起时发生。至于要处理哪个事件,或者是否两个都处理,那就看你要做什么了。

      要注意,这两个键盘事件出现在两个地方:

      1、UIElement 类公开了这两个事件,这是用于处理用户界面上的元素的键盘行为的,但不包括当前窗口。

      2、要在当前窗口层面上处理键盘事件,就要用到 CoreWindow 类,该类也公开这两个键盘事件。调用 GetForCurrentThread 静态方法,可以获取到当前窗口的实例。

      Part 1 :简单按键处理

      所谓简单按键,就是只按一个键的快捷键。这里我用一例子来演示。

      界面上有一个 ListView 控件,里面有四个选项,XAML 如下。

              <ListView Name="lv" Margin="13">
                  <ListViewItem>飞机</ListViewItem>
                  <ListViewItem>火车</ListViewItem>
                  <ListViewItem>自行车</ListViewItem>
                  <ListViewItem>公交车</ListViewItem>
              </ListView>

      随后,咱们实现的功能,用F1、F2、F3 和 F4 四个键分别代表选中上面列表控件中的项。如F1选中第一项,F2选中第二项等。

      此处,老周选用 CoreWindow 类,即该快捷键是可以在当前窗口范围内捕捉的。

              CoreWindow coreWind = null;
              ……
              coreWind = CoreWindow.GetForCurrentThread();
               coreWind.KeyDown += OnWindowKeyDown;
      
              ……
              private void OnWindowKeyDown(CoreWindow sender, KeyEventArgs args)
              {
                  switch (args.VirtualKey)
                  {
                      case Windows.System.VirtualKey.F1:
                          lv.SelectedIndex = 0;
                          break;
                      case Windows.System.VirtualKey.F2:
                          lv.SelectedIndex = 1;
                          break;
                      case Windows.System.VirtualKey.F3:
                          lv.SelectedIndex = 2;
                          break;
                      case Windows.System.VirtualKey.F4:
                          lv.SelectedIndex = 3;
                          break;
                  }
              }

      上面代码很好懂,此处就不解释了,节省600个字。

      Part 2 :复合快捷键处理

      所谓复合快捷键,就是同时按下两个或两个以上的键,咱们少说P话,还是通过实例来说明吧。这个例子是这样的:在页面上使用 Image 控件显示一张图片,然后,按下【 Ctrl + 加号】来放大图像,按【Ctrl + 减号】来缩小图像。

      其中主要的 XAML 如下。

              <Image Source="Assets\1.jpg" Margin="6" RenderTransformOrigin="0.5,0.5" >
                  <Image.RenderTransform>
                      <ScaleTransform x:Name="scl" ScaleX="1.0" ScaleY="1.0"/>
                  </Image.RenderTransform>
              </Image>

      由于 Image 控件不能接收键盘输入焦点,元素KeyDown和KeyUp事件不能响应,还是考虑用CoreWindow类上的事件。

              CoreWindow coreWind = null;
              protected override void OnNavigatedTo(NavigationEventArgs e)
              {
                  coreWind = CoreWindow.GetForCurrentThread();
                  coreWind.KeyDown += OnKeydown;
                  coreWind.KeyUp += OnKeyup;
              }

      这里要特特地声明一个bool类型的变量,用来表示Ctrl键是否按下。

      bool Ctrl_down = false;

      如果你不想用变量来标志Ctrl键是否按下,也可以访问 CoreWindow 对象的 GetKeyState(Windows.System.VirtualKey) 方法,来检查一下Ctrl 键是否已经按下。不过,老周认这还是直接声明一个变量来保存按键状态更简单。

      在KeyUp事件处理中,如果Ctrl键弹起,就让Ctrl_down变量改为 false。

              private void OnKeyup(CoreWindow sender, KeyEventArgs e)
              {
                  if (e.VirtualKey == VirtualKey.Control)
                  {
                      Ctrl_down = false;
                  }
              }

      在 KeyDown 事件中,分两种情形:a、如果按下的是Ctrl键,就把变量Ctrl_down变量改为 true;b、如果Ctrl键已按下,并且还按了其他键,就要判断一下,是不是按了加号键或减号键。加号键就放大图像,减号键就缩小图像。

              private void OnKeydown(CoreWindow sender, KeyEventArgs e)
              {
                  if (e.VirtualKey == VirtualKey.Control)
                  {
                      Ctrl_down = true;
                      return;
                  }
      
                  // 进行缩放处理
                  if (Ctrl_down)
                  {
                      switch (e.VirtualKey)
                      {
                          case VirtualKey.Add:
                              if (scl.ScaleX < 5.0) scl.ScaleX += 0.2;
                              if (scl.ScaleY < 5.0) scl.ScaleY += 0.2;
                              break;
                          case VirtualKey.Subtract:
                              if (scl.ScaleX > 0.3) scl.ScaleX -= 0.2;
                              if (scl.ScaleY > 0.3) scl.ScaleY -= 0.2;
                              break;
                      }
                  }
              }

      现在运行示例,然后自己按【Ctrl + (+)】和【Ctrl + (-)】键试试。

      请各位严重注意一下:Key 事件并不记录 Alt 键,该键在 VirtualKey 枚举中用 Menu 表示,这家伙比较另类。它可以从表示按键状态的 CorePhysicalKeyStatus 结构的 IsMenuKeyDown 字段获取。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://www.cnblogs.com/tcjiaan/p/7047754.html,作者:东邪独孤,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:魔物了占领若干据点,这些据点被若干条道路相连接, roads[i] = [x, y] 表示编号 x、y 的两个据点通过一条道路连接。

      下一篇:前端工作总结268-js日期操作

      相关文章

      2024-06-26 06:19:51

      【Win 10 应用开发】在代码中加载文本资源

      在 XAML 中使用 uid 加载资源虽然方便,但是它有个缺点——不同控件有不同的属性,有时候不太方便匹配,当然了,如果你的资源所针对的控件类型不多,那是无所谓的。

      2024-06-26 06:19:51
      Resource , UWP
      2024-06-26 06:19:40

      【Win 10 应用开发】TCP通信过程

      TCP是基于连接的,所以,肯定有一方是监听者,通常称服务端或服务器,它负责接受连接请求,但不负责通信;接受连接后得到一个专用于通信的套接字。

      2024-06-26 06:19:40
      UWP , win10
      2024-06-26 06:19:40

      【Windows 10 应用开发】跟随系统主题颜色

      有些时候,希望应用程序中的某些颜色可以与系统的主题颜色相同,并且当系统主题色改变时进行同步。

      2024-06-26 06:19:40
      UWP , Windows10
      2024-06-26 06:18:07

      【Win 10 应用开发】共享目标(UWP)

      【Win 10 应用开发】共享目标(UWP)

      2024-06-26 06:18:07
      UWP , win10
      2024-06-26 06:17:16

      【Win 10 应用开发】加载外部的 srt 字幕

      据说系统内置的多媒体功能支持 srt、 ssa 等字幕,老周测试过几种格式的字幕均能加载。SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写。

      2024-06-26 06:17:16
      UWP , win10
      2024-06-26 06:17:16

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      UI Composition 有一个核心类——对,就是 Compositor 类,它是总生产车间,组成 UI 的各种元素都可以由它来创建,所以,你会看到,它公开了 K 个以 Create 开头的方法。我们在组建 UI 时所用到的各种元素都可以调用这些以 Create 打头的方法来创建。

      2024-06-26 06:17:16
      UI , UWP , Win10
      2024-06-26 06:16:28

      【Win 10 应用开发】手写识别

      识别功能早在Win 8 App的API中就有了,到了UWP,同样使用,这叫传承,一路学过来,都是一个体系的,我不明白为什么某些人一遇到升级就说SDK变化太大,适应不了。

      2024-06-26 06:16:28
      UWP
      2024-06-18 07:20:39

      说说 C# 9 新特性的实际运用

      说说 C# 9 新特性的实际运用

      2024-06-18 07:20:39
      Resource , UWP
      2024-06-17 10:03:58

      【Windows 10 应用开发】使用x:Bind标记动态获得计算结果

      UWP 在传统(WPF)的Binding标记上引入了 Bind 标记,Bind 基于编译阶段生成,因而具有较高的性能。但是,你得注意,这个性能上的优化是免去了运行阶段动态绑定的开销,这是不包括数据源的体积的。

      2024-06-17 10:03:58
      UWP
      2024-05-20 08:43:45

      【Win 10 应用开发】应用预启动

      所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了。

      2024-05-20 08:43:45
      UWP
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5248311

      查看更多

      最新文章

      【Win 10 应用开发】在代码中加载文本资源

      2024-06-26 06:19:51

      【Windows 10 应用开发】跟随系统主题颜色

      2024-06-26 06:19:40

      【Win 10 应用开发】TCP通信过程

      2024-06-26 06:19:40

      【Win 10 应用开发】共享目标(UWP)

      2024-06-26 06:18:07

      【Win 10 应用开发】加载外部的 srt 字幕

      2024-06-26 06:17:16

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      2024-06-26 06:17:16

      查看更多

      热门文章

      【Win 10 应用开发】应用预启动

      2024-05-20 08:43:45

      【Windows 10 应用开发】跟随系统主题颜色

      2024-06-26 06:19:40

      【Win 10 应用开发】在代码中加载文本资源

      2024-06-26 06:19:51

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      2024-06-26 06:17:16

      【Win 10 应用开发】共享目标(UWP)

      2024-06-26 06:18:07

      【Win 10 应用开发】TCP通信过程

      2024-06-26 06:19:40

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【Win 10 应用开发】在代码中加载文本资源

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      【Win 10 应用开发】应用预启动

      【Windows 10 应用开发】跟随系统主题颜色

      【Win 10 应用开发】加载外部的 srt 字幕

      说说 C# 9 新特性的实际运用

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号