2013-04-09 6 views
7

J'ai donc travaillé sur un projet favori pour le Windows Store et j'ai rencontré un problème: les événements clavier ne se déclenchent pas. J'ai essayé de forcer le focus sur la page principale, j'ai essayé de forcer le focus sur la grille, mais rien ne semble aider. Quelqu'un rencontre des problèmes comme celui-ci? Mon google-fu m'a échoué.Les événements clavier ne se déclenchent pas dans l'application RT

Code pertinent:

XAML:

<Page 
    x:Class="PlatformTD.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:PlatformTD" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" 
      Name="LayoutRoot"> 
     <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
       Name="MainCanvas" x:FieldModifier="public" 
       SizeChanged="MainCanvas_SizeChanged" 
       Loaded="MainCanvas_Loaded" /> 
    </Grid> 
</Page> 

C#:

public MainPage() 
{ 
    this.InitializeComponent(); 
    MainCanvas.KeyDown += MainPage_KeyDown; 
    MainCanvas.KeyUp += MainPage_KeyUp; 
    KeyDown += MainPage_KeyDown; 
    KeyUp += MainPage_KeyUp; 
    LayoutRoot.KeyDown += MainPage_KeyDown; 
    LayoutRoot.KeyUp += MainPage_KeyUp; 
} 
private void MainPage_KeyUp(object sender, KeyRoutedEventArgs e) 
{ // breakpoint here to catch when event fires 
    // does stuff 
} 
private void MainPage_KeyDown(object sender, KeyRoutedEventArgs e) 
{ // breakpoint here to catch when event fires 
    // does stuff 
} 
+0

Ces événements de clavier ne sont déclenchés que si vos contrôles ont le focus. Si vous voulez gérer tous les événements clés, utilisez la suggestion d'Igor pour les obtenir depuis la fenêtre principale. Sinon, vous devez activer le focus sur les contrôles et leur donner le focus. –

Répondre

7

Que diriez-vous quelque chose comme ceci:

public MainPage() 
{ 
    this.InitializeComponent(); 
    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) 
{ 
    throw new NotImplementedException(); 
} 

void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args) 
{ 
    throw new NotImplementedException(); 
} 

Travaux de mon côté. Solution found here.

+0

Ne connaissait pas CoreWindow, fonctionne comme un charme, merci! –

Questions connexes