2013-04-09 10 views
7

Pracowałem nad projektem dla sklepu Windows Store i uderzyłem trochę w blokadę: zdarzenia na klawiaturze odmawiają odpalenia. Próbowałem skupić się na głównej stronie, próbowałem skupić się na siatce, ale nic nie pomaga. Czy ktoś ma takie problemy? Mój google-fu mnie zawiódł.Imprezy na klawiaturze nie są uruchamiane w aplikacji RT

odpowiedni kod:

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

Te zdarzenia na klawiaturze są wyświetlane tylko wtedy, gdy elementy sterujące są ustawione. Jeśli chcesz obsłużyć wszystkie kluczowe wydarzenia - użyj sugestii Igora, aby pobrać je z głównego okna. W przeciwnym razie musisz włączyć fokus na kontrolkach i skupić się na nich. –

Odpowiedz

7

Jak o coś takiego:

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(); 
} 

działa na moim boku. Rozwiązanie found here.

+0

Nie wiedziałem o CoreWindow, działa jak czar, dzięki! –

Powiązane problemy