Клавиши быстрого вызова в приложениях Метро

Как я захватываю клавишу быстрого вызова, неважно какой контроль фокусируется? Я не хочу идти и писать то же самое для каждого возможного контроля, к которому пользователь мог дать центр. Таким образом, как я могу наблюдать за page-wide/control-independent коротким путем?

4
nl ja de

3 ответы

Добавьте этот код к конструктору, он будет обращаться с глобальным ключом вниз и ключом

Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
        Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp;

вот их события

void CoreWindow_KeyUp(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
    {
        //this.Frame.Navigate(typeof(MainPage));
        var key = args.VirtualKey;
        string aa = args.ToString();
    }

    void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
    {
        //this.Frame.Navigate(typeof(MainPage));
        var key = args.VirtualKey;
        string aa = args.ToString();
    }

можно обращаться собственной логикой в этом событии.

4
добавлено

Как насчет того, чтобы установить обработчик событий в элементе корня? Я думаю, что событие в конечном счете достигнет родительского контроля, если это не будет обработано больше нигде. Вот то, что я сделал бы для простого события KeyDown.


1
добавлено

Лучшее решение состояло в том, чтобы использовать элемент корня, как предложено ранее, потому что глобальное более легкое использование, функции одного класса относились к каждой странице, означая, что нужно обращаться с каждым коротким путем отдельно на каждой странице или ошибках риска.

Мой XAML был настроен следующим образом:



    ...


Мой C#, чтобы управлять той страницей похож на это:

... 
namespace DenisQuiz.UWP
{
   public sealed partial class StudyADeck : Page
   {
      ...
      public StudyADeck()
      {
         ...
        //Keyboard shortcuts
         root.KeyDown += Root_KeyDown;
      }

      private void Root_KeyDown(object sender, KeyRoutedEventArgs e)
      {
         switch (e.Key)
         {
            case Windows.System.VirtualKey.F:
               FlipCard();
               break;
            case Windows.System.VirtualKey.Right:
               NextCard();
               break;
            case Windows.System.VirtualKey.Left:
               PreviousCard();
               break;
            case Windows.System.VirtualKey.S:
               Frame.GoBack();//Stop Studying
               break;
            case Windows.System.VirtualKey.E:
               Frame.Navigate(typeof(EditANotecard));//Edit this card
               break;
            case Windows.System.VirtualKey.D:
               DeleteNotecardAsync();
               break;
            default:
               break;
         }
      }
...

Имя , к корню получают доступ через любой keypress, сделанный, когда то окно открыто через выражение корень. KeyDown + = Root_KeyDown . Это называет Root_KeyDown() метод, который тогда может осуществить любую функцию на основе ключа, посылают keypress аргументом KeyRoutedEventArgs e .

Мой код осуществляет выключатель заявление, чтобы определить ключевые функции.

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot