Key_Down und Key_Up funktionieren in Store-Apps nicht

Die mobile Denkfabrik  –  1 Kommentare

Die Entgegennahme von Tastatureingaben ist normalerweise nichts, worüber man sich als Entwickler Gedanken machen müsste. In den Eigenschaftsfenstern der meisten Widgets gibt es jede Menge Eventhandler, die nur auf ihre Implementierung warten.

Betrachtet sei als Beispiel die folgende Struktur:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
Loaded="Grid_Loaded" Unloaded="Grid_Unloaded" KeyUp="Grid_KeyUp">
<Image x:Name="ImgCanvas" HorizontalAlignment="Left" Margin="10,10,0,0"
VerticalAlignment="Top"/>
</Grid>

Bei ihrer Ausführung lauert Ungemach für unvorsichtige Entwickler. Die in Steuerelementen befindlichen Eventhandler werden nur dann "gefüttert", wenn das betreffende Widget oder eines seiner Kinder im Besitz des Fokus ist. In allen anderen Fällen verfallen die Tastatureingaben "stillschweigend".

Erfreulicherweise lässt sich das Problem ohne Aufwand lösen. Dafür muss man die Eventhandler im Rahmen der Initialisierung des Formulars durch Einschreiben in das CoreWindow installieren:

public MainPage()
{
this.InitializeComponent();
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
}

Die Signatur der Methode entspricht dem, was man von automatisch generierten Eventhandlern gewohnt ist:

void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, 
Windows.UI.Core.KeyEventArgs e)
{
if (e.VirtualKey == Windows.System.VirtualKey.F)
{
myState = 'c';
}
else if (e.VirtualKey == Windows.System.VirtualKey.T)
{
myState = 'd';
}
else if (e.VirtualKey == Windows.System.VirtualKey.I)
{
myState = 'i';
}
else if (e.VirtualKey == Windows.System.VirtualKey.P)
{
myState = 'p';
}
}