Некорректно работает отображение нажатий клавиш

Рейтинг: 0Ответов: 1Опубликовано: 04.05.2023

При нажатии на F10 кнопка F10 на форме никак не реагирует, зато реагирует кнопка System(Win), также при нажатии на любую из двух кнопок Alt, они никак не реагируют, но при нажатии RCtrl и RAlt одновременно RAlt все таки реагирует, в чем может быть проблема ?

    private void WinKeyDown(object sender, KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.F10:// F10
                {
                    F10.Background = Brushes.LightGreen;
                }
                break;
            //SpecialKeys------------------------------------------------------------------------------------------------------------------------------------------------
            //SpecialKeys------------------------------------------------------------------------------------------------------------------------------------------------
            //SpecialKeys------------------------------------------------------------------------------------------------------------------------------------------------
            case Key.Escape:// ESC
                {
                    Escape.Background = Brushes.LightGreen;
                }
                break;
            case Key.Back:// Backspace
                {
                    Backspace.Background = Brushes.LightGreen;
                }
                break;
            case Key.Tab:// Tab
                {
                    Tab.Background = Brushes.LightGreen;
                }
                break;
            case Key.Enter:// Enter
                {
                    Enter.Background = Brushes.LightGreen;
                }
                break;
            case Key.CapsLock:// CAPS
                {
                    Capslock.Background = Brushes.LightGreen;
                }
                break;
            case Key.LeftShift:// Left Shift
                {
                    LShift.Background = Brushes.LightGreen;
                }
                break;
            case Key.RightShift:// Right Shift
                {
                    RShift.Background = Brushes.LightGreen;
                }
                break;
            case Key.LeftCtrl:// Left Ctrl
                {
                    LCtrl.Background = Brushes.LightGreen;
                }
                break;
            case Key.System:// Win
                {
                    Sys.Background = Brushes.LightGreen;
                }
                break;
            case Key.LeftAlt:// Left Alt
                {
                    LAlt.Background = Brushes.LightGreen;
                }
                break;
            case Key.Space:// Space
                {
                    SpaceBar.Background = Brushes.LightGreen;
                }
                break;
            case Key.RightAlt:// Right Alt
                {
                    RAlt.Background = Brushes.LightGreen;
                }
                break;
            case Key.RightCtrl:// Right Ctrl
                {
                    RCtrl.Background = Brushes.LightGreen;
                }
                break;
            case Key.Apps:// Menu
                {
                    Apps.Background = Brushes.LightGreen;
                }
                break;
        }
    }

    private void WinKeyUp(object sender, KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.F10:// F10
                {
                    F10.Background = Brushes.LightGray;
                }
                break;
            //SpecialKeys------------------------------------------------------------------------------------------------------------------------------------------------
            //SpecialKeys------------------------------------------------------------------------------------------------------------------------------------------------
            //SpecialKeys------------------------------------------------------------------------------------------------------------------------------------------------
            case Key.Escape:// ESC
                {
                    Escape.Background = Brushes.LightGray;
                }
                break;
            case Key.Back:// Backspace
                {
                    Backspace.Background = Brushes.LightGray;
                }
                break;
            case Key.Tab:// Tab
                {
                    Tab.Background = Brushes.LightGray;
                }
                break;
            case Key.Enter:// Enter
                {
                    Enter.Background = Brushes.LightGray;
                }
                break;
            case Key.CapsLock:// CAPS
                {
                    Capslock.Background = Brushes.LightGray;
                }
                break;
            case Key.LeftShift:// Left Shift
                {
                    LShift.Background = Brushes.LightGray;
                }
                break;
            case Key.RightShift:// Right Shift
                {
                    RShift.Background = Brushes.LightGray;
                }
                break;
            case Key.LeftCtrl:// Left Ctrl
                {
                    LCtrl.Background = Brushes.LightGray;
                }
                break;
            case Key.System:// Win
                {
                    Sys.Background = Brushes.LightGray;
                }
                break;
            case Key.LeftAlt:// Left Alt
                {
                    LAlt.Background = Brushes.LightGray;
                }
                break;
            case Key.Space:// Space
                {
                    SpaceBar.Background = Brushes.LightGray;
                }
                break;
            case Key.RightAlt:// Right Alt
                {
                    RAlt.Background = Brushes.LightGray;
                }
                break;
            case Key.RightCtrl:// Right Ctrl
                {
                    RCtrl.Background = Brushes.LightGray;
                }
                break;
            case Key.Apps:// Menu
                {
                    Apps.Background = Brushes.LightGray;
                }
                break;
        }
    }

Вот XAML код :

<Window x:Class="Keyboard_Setup.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Title="Keyboard Setup" Height="720" Width="1280"
    Background="Black"
    PreviewKeyDown="WinKeyDown"
    PreviewKeyUp="WinKeyUp">
<Grid>
    <Canvas>
        <Button x:Name="F10" Content="F10" Background="Gray" Width="48" Height="50" Canvas.Top="30" Canvas.Left="678"/>
        <Button x:Name="RShift" Content="Shift" Background="Gray" Width="154" Height="50" Canvas.Top="265" Canvas.Left="680"/>
        <Button x:Name="LCtrl" Content="Ctrl" Background="Gray" Width="60" Height="50" Canvas.Top="320" Canvas.Left="30"/>
        <Button x:Name="Sys" Content="Win" Background="Gray" Width="60" Height="50" Canvas.Top="320" Canvas.Left="96"/>
        <Button x:Name="LAlt" Content="Alt" Background="Gray" Width="60" Height="50" Canvas.Top="320" Canvas.Left="162"/>
        <Button x:Name="SpaceBar" Content="" Background="Gray" Width="320" Height="50" Canvas.Top="320" Canvas.Left="228"/>
        <Button x:Name="RAlt" Content="Alt" Background="Gray" Width="64" Height="50" Canvas.Top="320" Canvas.Left="554"/>
        <Button x:Name="Apps" Content="Menu" Background="Gray" Width="134" Height="50" Canvas.Top="320" Canvas.Left="624"/>
        <Button x:Name="RCtrl" Content="Ctrl" Background="Gray" Width="70" Height="50" Canvas.Top="320" Canvas.Left="764"/>
    </Canvas>
</Grid>

Ответы

▲ 1Принят

Добавил такую проверку для всех кнопок которые не отображались как нужно, а отзывались к SytemKey в оба метода WinKeyDown и WinKeyUp соответственно только с разными цветами окрашивания кнопки. И всё стало работать как надо.

        if(e.SystemKey == Key.RightAlt)
        {
            RAlt.Background = Brushes.LightGreen;
        }
        if(e.SystemKey == Key.F10)
        {
            F10.Background = Brushes.LightGreen;
        }
        if(e.SystemKey == Key.LeftAlt)
        {
            LAlt.Background = Brushes.LightGreen;
        }

Также вместо case Key.System сделал case Key.Lwin После этого она стала отображаться корректно.