You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为winrt::Windows::System::VirtualKey枚举外的键设置KeyboardAccelerator?

解决UWP中为=/-键设置KeyboardAccelerator的问题

核心问题原因

winrt::Windows::System::VirtualKey枚举未包含=键(187)和-键(189)的定义,XAML直接输入数字会触发枚举值校验失败,而{x:Bind}的类型转换规则对部分键码存在兼容性问题。

简便实现方法

推荐直接在后台代码中对KeyboardAccelerator的Key属性进行强制类型赋值,绕过XAML的枚举校验限制:

步骤1:XAML中定义带名称的KeyboardAccelerator

<MenuFlyoutItem ...>
    <MenuFlyoutItem.KeyboardAccelerators>
        <!-- 为=键定义快捷键 -->
        <KeyboardAccelerator x:Name="EqualsKeyAccelerator" />
        <!-- 为-键定义快捷键 -->
        <KeyboardAccelerator x:Name="MinusKeyAccelerator" />
    </MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>

步骤2:后台代码赋值(C++/WinRT示例)

// 在页面/控件的构造函数或Loaded事件中执行
EqualsKeyAccelerator().Key(static_cast<winrt::Windows::System::VirtualKey>(187));
MinusKeyAccelerator().Key(static_cast<winrt::Windows::System::VirtualKey>(189));

步骤2:后台代码赋值(C#示例)

// 在页面/控件的构造函数或Loaded事件中执行
EqualsKeyAccelerator.Key = (VirtualKey)187;
MinusKeyAccelerator.Key = (VirtualKey)189;

补充说明

  • 这种方式完全避开XAML的枚举值验证逻辑,对所有未在VirtualKey枚举中定义的键码都有效。
  • 若需要添加修饰键(如Ctrl、Shift),直接在XAML或后台设置Modifiers属性即可,例如:
    <KeyboardAccelerator x:Name="CtrlEqualsAccelerator" Modifiers="Control" />
    
    后台对应设置键码即可。

内容的提问来源于stack exchange,提问作者Michael Chourdakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:52:38