如何在.NET MAUI中检测按键事件 (KeyDown事件处理程序)?

5

我不确定在.NET MAUI中是否可能实现。有人找到了检测按键(包括特殊键)的解决方案吗?


你有没有谷歌搜索过你的问题标题?可以通过这个查询在SO上看到之前类似的问题:https://www.google.com/search?q=How+To+Detect+When+Any+Key+Pressed+in+.NET+MAUI+site:stackoverflow.com。**更新**我刚刚注意到你提到了特殊键,所以现有的答案可能不适用。也许可以参考 https://dev59.com/4cTra4cB1Zd3GeqP8HWJ#72360158,在你的Windows文件夹中。 - ToolmakerSteve
我遇到了同样的问题。我需要检测Zebra扫描枪上按下P1或F1键时的情况。唯一接近的事件是“TextChanged”事件,但当按下不可打印字符键时,它不会触发。我正在研究Zebra StageNow应用程序以重新映射一个键来发送意图。也许这不是正确的方法。也许重新映射键以将P1替换为“+”键会更好? - D. Kermott
2个回答

3

这是Maui中没有默认支持的功能,但对于Windows和Android来说是可行的。

对于Android,您可以子类化此类。

对于Windows,您可以使用这个库来钩取原生键盘系统。


有没有 Mac 的等效物? - alelom
没关系,实际上Sharphook是多平台的! - alelom
你有没有关于如何为 MAUI 或 ASP Core 应用程序配置 Sharphook 的示例? - alelom
@alelom 我使用 https://github.com/TolikPylypchuk/SharpHook/discussions/22 成功让它工作了。 - Gajendra Singh

0
键盘加速器在 MAUI .NET 8 中。可以通过将 KeyboardAccelerator 添加到 MenuFlyoutItemKeyboardAccelerators 集合中来附加键盘加速器。
可以按照以下方式将其添加到 ContentPage.MenuBarItems 中。
<!-- MainPage.xaml -->
<ContentPage>
    <ContentPage.MenuBarItems>
        <MenuBarItem Text="File">
            <MenuFlyoutItem Text="Down" Clicked="MenuFlyoutItem_Clicked">
                <MenuFlyoutItem.KeyboardAccelerators>
                    <KeyboardAccelerator Key="Down" />
                </MenuFlyoutItem.KeyboardAccelerators>
            </MenuFlyoutItem>
            <MenuFlyoutItem Text="Up" Clicked="MenuFlyoutItem_Clicked">
                <MenuFlyoutItem.KeyboardAccelerators>
                    <KeyboardAccelerator Key="Up" />
                </MenuFlyoutItem.KeyboardAccelerators>
            </MenuFlyoutItem>
            <MenuFlyoutItem Text="Left" Clicked="MenuFlyoutItem_Clicked">
                <MenuFlyoutItem.KeyboardAccelerators>
                    <KeyboardAccelerator Key="Left" />
                </MenuFlyoutItem.KeyboardAccelerators>
            </MenuFlyoutItem>
            <MenuFlyoutItem Text="Right" Clicked="MenuFlyoutItem_Clicked">
                <MenuFlyoutItem.KeyboardAccelerators>
                    <KeyboardAccelerator Key="Right" />
                </MenuFlyoutItem.KeyboardAccelerators>
            </MenuFlyoutItem>
        </MenuBarItem>
    </ContentPage.MenuBarItems>
</ContentPage>

// MainPage.xaml.cs
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void MenuFlyoutItem_Clicked(object sender, EventArgs e)
    {
        Debug.WriteLine($"MenuFlyoutItem {((MenuFlyoutItem)sender).Text} clicked");
    }
}

https://learn.microsoft.com/en-us/dotnet/maui/user-interface/keyboard-accelerators?view=net-maui-8.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接