private void ColorPalettePage_KeyDown(object sender, KeyRoutedEventArgs e) { var gridView = sender as GridView; if (e.OriginalKey == Windows.System.VirtualKey.Right && gridView.SelectedIndex == gridView.ItemsPanelRoot.Children.Count - 1) { ColorPaletteChangeWithKeyboard = PaletteSwitchingDirectionWithKeyboard.Next; } else if (e.OriginalKey == Windows.System.VirtualKey.Left && gridView.SelectedIndex == 0) { ColorPaletteChangeWithKeyboard = PaletteSwitchingDirectionWithKeyboard.Prev; } }
// If FlipView selection has been changed with keyboard, set focus on appropriate colorItem. private void ColorPaletteFlipView_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Because sometimes, Focus shifts to FlipViewItem when arrow key is spammed. var x = FocusManager.GetFocusedElement(); if (x is FlipViewItem) { ColorPaletteChangeWithKeyboard = (PalettePageIndex + 1 == ColorPaletteFlipView.SelectedIndex) ? PaletteSwitchingDirectionWithKeyboard.Next : PaletteSwitchingDirectionWithKeyboard.Prev; } PalettePageIndex = ColorPaletteFlipView.SelectedIndex; var flipView = sender as FlipView; if (ColorPaletteChangeWithKeyboard == PaletteSwitchingDirectionWithKeyboard.None) { return; } var flipViewItems = flipView.ItemsPanelRoot.Children; GridView currentGridView = null; foreach (FlipViewItem flipViewItem in flipViewItems) { if ((flipViewItem.Content as ColorPalettePageViewModel) == flipView.SelectedItem) { currentGridView = flipViewItem.ContentTemplateRoot as GridView; int index = (ColorPaletteChangeWithKeyboard == PaletteSwitchingDirectionWithKeyboard.Next) ? 0 : currentGridView.ItemsPanelRoot.Children.Count - 1; var item = currentGridView.ItemsPanelRoot.Children[index] as GridViewItem; item.Focus(FocusState.Keyboard); } } ColorPaletteChangeWithKeyboard = PaletteSwitchingDirectionWithKeyboard.None; }