How To Detect When Any Key Pressed in .NET MAUI (KeyDown Event Handler)

4.5k Views Asked by At

I am not sure if its possible in .NET MAUI. Is anyone found solution to detect key press (including Special keys )?

2

There are 2 best solutions below

4
DeMama On BEST ANSWER

This is a feature that is not available out of the box in Maui, but is feasable for Windows and Android.

For android you can subclass this.

For Windows you can hook into the native keyboard system using this library.

1
Stephen Quan On

Keyboard accelerators are in MAUI .NET 8. A KeyboardAccelerator can be attached to a MenuFlyoutItem by adding to its KeyboardAccelerators collection.

This can be added to ContentPage.MenuBarItems as follows

<!-- 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