private static bool NavigateUsingKeyboard(object element, KeyEventArgs args, Menu menu, Orientation orientation) { if (!menu.IsOpened && element is MenuItem) { menu.UpdateMenuItemsFlyoutPlacement(); if (args.VirtualKey == VirtualKey.Enter || ((args.VirtualKey == VirtualKey.Down) && menu._currentFlyoutPlacement == FlyoutPlacementMode.Bottom) || ((args.VirtualKey == VirtualKey.Up) && menu._currentFlyoutPlacement == FlyoutPlacementMode.Top) || ((args.VirtualKey == VirtualKey.Left) && menu._currentFlyoutPlacement == FlyoutPlacementMode.Left) || ((args.VirtualKey == VirtualKey.Right) && menu._currentFlyoutPlacement == FlyoutPlacementMode.Right)) { menu.SelectedMenuItem.ShowMenu(); return true; } if ((args.VirtualKey == VirtualKey.Left && orientation == Orientation.Horizontal) || (args.VirtualKey == VirtualKey.Up && orientation == Orientation.Vertical)) { GetNextMenuItem(menu, -1); return true; } if ((args.VirtualKey == VirtualKey.Right && orientation == Orientation.Horizontal) || (args.VirtualKey == VirtualKey.Down && orientation == Orientation.Vertical)) { GetNextMenuItem(menu, +1); return true; } } if ((menu._currentFlyoutPlacement == FlyoutPlacementMode.Left && args.VirtualKey == VirtualKey.Right) || (args.VirtualKey == VirtualKey.Left && menu._currentFlyoutPlacement != FlyoutPlacementMode.Left)) { if (element is MenuFlyoutItem) { menu.IsInTransitionState = true; menu.SelectedMenuItem.HideMenu(); GetNextMenuItem(menu, -1).ShowMenu(); return true; } if (element is MenuFlyoutSubItem) { var menuFlyoutSubItem = (MenuFlyoutSubItem)element; if (menuFlyoutSubItem.Parent is MenuItem && element == menu._lastFocusElement) { menu.IsInTransitionState = true; menu.SelectedMenuItem.HideMenu(); GetNextMenuItem(menu, -1).ShowMenu(); return true; } } } if ((args.VirtualKey == VirtualKey.Right && menu._currentFlyoutPlacement != FlyoutPlacementMode.Left) || (args.VirtualKey == VirtualKey.Left && menu._currentFlyoutPlacement == FlyoutPlacementMode.Left)) { if (element is MenuFlyoutItem) { menu.IsInTransitionState = true; menu.SelectedMenuItem.HideMenu(); GetNextMenuItem(menu, +1).ShowMenu(); return true; } } return false; }