2016-06-20 7 views
0

Я использую этот код для распознавания того, какой ключ нажат, но когда я пытаюсь распознать стрелки, он просто ничего не показывает или даже не активирует TestFunction();Проблемы с KeyCode в C# UWP

private void CoreWindow_CharacterReceived(CoreWindow sender, CharacterReceivedEventArgs args) 
{ 
    if (args.KeyCode == 39) //Right Arrow 
    { 
     //Do somthing 
     TestFunction(); 
    } 
    else //Detect All arrows KeyCode(Never display anything for this keys) 
    { 
     Debug.Write(args.KeyCode.ToString()); 
    } 
} 

PD: Я использую этот код на исполнение:

Window.Current.CoreWindow.CharacterReceived += CoreWindow_CharacterReceived; 

Благодаря

+0

вы уверены, что вы получите отладчик по этому методу? – Neel

+0

Да, я сделал, я получаю каждую клавишу, но вверх, вниз, влево, вправо, управление, alt – Onelio

ответ

1

Стрелка не совсем характер. Возможно, вам стоит рассмотреть KeyUp и KeyDown событий?

+0

Как VirtualKey? Я уже пробовал это и даю тот же результат. – Onelio

+0

Возможно, речь идет о фокусе? Взгляните на эту ссылку https://social.msdn.microsoft.com/Forums/sqlserver/en-US/944e2037-e4cf-4299-9b0a-a685ff97f304/uwp-arrows-keys-as-trigger-in-uwp? forum = wpdevelop – kra

+0

Возможно, но каждый ключевой труд, я могу нажать пробел или любое слово, но стрелки или клавиши управления не – Onelio

0

Но каждая ключевая работа, я могу нажать пробел или любое слово, но стрелки или клавиши управления не

CoreWindow.CharacterReceived событие вызывается, когда новый характер принимается входной очереди. A символ - это единственный визуальный объект, используемый для представления текста, цифр или символов. Стрелки или клавиши управления не представляют персонажа. Таким образом, CoreWindow.CharacterReceived событие не будет срабатывать при нажатии этих клавиш.

Если вы хотите распознать, какую клавишу на клавиатуре, включая стрелку и управление, а также другие ключи, которые не представляют какой-либо символ нажат, используйте UIElement.KeyDown или UIElement.KeyUp события (Происходит, когда клавиша клавиатуры нажата/отпущена, когда UIElement имеет фокус) вместо этого как кра, упомянутое выше.

Ниже приводится простой код, который я проверил:

MainPage.xaml:

<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> 
    <!--Define a control which can have focus and accept input--> 
    <TextBox Header="Get Focus and Press Any key on Keyboard" x:Name="txt1" KeyDown="txt1_KeyDown" /> 
</StackPanel> 

MainPage.xaml.cs:

public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    private async void txt1_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     // Right Arrow key Pressed 
     if (e.Key == Windows.System.VirtualKey.Right) 
     { 
      // Do something 
      Debug.WriteLine(e.Key.ToString()); 
      await new MessageDialog(e.Key.ToString()).ShowAsync(); 
     } 
     // Other Keys Pressed 
     await new MessageDialog(e.Key.ToString()).ShowAsync(); 
    }