private void FlipViewBanner_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { FlipViewBanner.UpdateLayout(); VerticalRepeater.UpdateLayout(); switch (e.OriginalKey) { case VirtualKey.GamepadLeftTrigger: e.Handled = true; break; case VirtualKey.GamepadRightTrigger: e.Handled = true; break; case VirtualKey.Down: case VirtualKey.GamepadDPadDown: case VirtualKey.GamepadLeftThumbstickDown: { try { var grid = VerticalRepeater.TryGetElement(0) as Grid; if (grid != null) { grid.StartBringIntoView(); var horizontalRepeater = TreeHelper.FindVisualChild <ItemsRepeater>(grid); var firstCardItemStackPanel = horizontalRepeater.TryGetElement(0); var buttonCardItem = TreeHelper.FindVisualChild <Button>(firstCardItemStackPanel); if (buttonCardItem != null) { buttonCardItem.Focus(FocusState.Programmatic); buttonCardItem.StartBringIntoView(); e.Handled = true; } } } catch { } //e.Handled = true; } break; case VirtualKey.Up: case VirtualKey.GamepadDPadUp: case VirtualKey.GamepadLeftThumbstickUp: //Do nothing e.Handled = true; break; case VirtualKey.Left: case VirtualKey.GamepadDPadLeft: case VirtualKey.GamepadLeftThumbstickLeft: if ((sender as FlipView).SelectedIndex == 0) { ShellPage.shellPage.navigationView.IsPaneOpen = true; e.Handled = true; } break; case VirtualKey.Space: case VirtualKey.Enter: case VirtualKey.GamepadA: break; default: break; } }
private async void ButtonCardItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { FlipViewBanner.UpdateLayout(); VerticalRepeater.UpdateLayout(); FindNextElementOptions findNextElementOptions = new FindNextElementOptions { SearchRoot = ScrollViewerHome, XYFocusNavigationStrategyOverride = XYFocusNavigationStrategyOverride.NavigationDirectionDistance }; //Before move focus //Get current item data context var currentItem = (sender as Button).DataContext as ProductItem; var currentFocusElement = FocusManager.GetFocusedElement() as Button; switch (e.OriginalKey) { case VirtualKey.Up: case VirtualKey.GamepadDPadUp: case VirtualKey.GamepadLeftThumbstickUp: case VirtualKey.Down: case VirtualKey.GamepadDPadDown: case VirtualKey.GamepadLeftThumbstickDown: { //if (!canTap) //{ // e.Handled = true; // return; //} //canTap = false; } break; case VirtualKey.Left: case VirtualKey.GamepadDPadLeft: case VirtualKey.GamepadLeftThumbstickLeft: { } break; case VirtualKey.Right: case VirtualKey.GamepadDPadRight: case VirtualKey.GamepadLeftThumbstickRight: { } break; case VirtualKey.GamepadA: case VirtualKey.Enter: case VirtualKey.Space: { } break; default: break; } try { switch (e.OriginalKey) { case VirtualKey.Up: case VirtualKey.GamepadDPadUp: case VirtualKey.GamepadLeftThumbstickUp: { //BringIntoViewOptions options = new BringIntoViewOptions //{ // VerticalOffset = 50.0, // AnimationDesired = true //}; ////var tt = currentFocusElement.TransformToVisual(appWindow.Content); ////Point currentFocusLeftTopPoint = tt.TransformPoint(new Point(appWindow.Bounds.Left, appWindow.Bounds.Top)); ////Rect rect = new Rect(124, currentFocusLeftTopPoint.Y - 500, 1920, 500); ////var nextFocus = FocusManager.FindNextFocusableElement(FocusNavigationDirection.Next, rect); //var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Up, findNextElementOptions); //if (candidate != null && candidate is Button) //{ // (candidate as Control).StartBringIntoView(); // (candidate as Control).Focus(FocusState.Programmatic); // e.Handled = true; //} //else if(candidate != null) //{ // var current = FlipViewBanner.SelectedItem; // var currentContainer = FlipViewBanner.ContainerFromItem(current) as FlipViewItem; // var result = await FocusManager.TryFocusAsync(currentContainer, FocusState.Programmatic); // currentContainer.StartBringIntoView(); // e.Handled = true; //} if (!canTap) { return; } canTap = false; riverIndex--; if (riverIndex < 0) { var current = FlipViewBanner.SelectedItem; var currentContainer = FlipViewBanner.ContainerFromItem(current) as FlipViewItem; var result = await FocusManager.TryFocusAsync(currentContainer, FocusState.Programmatic); currentContainer.StartBringIntoView(); canTap = true; e.Handled = true; return; } try { Debug.WriteLine("River index: " + riverIndex); var grid = VerticalRepeater.TryGetElement(riverIndex) as Grid; if (grid != null) { grid.StartBringIntoView(); var horizontalRepeater = TreeHelper.FindVisualChild <ItemsRepeater>(grid); if (horizontalRepeater != null) { horizontalRepeater.UpdateLayout(); var lastFocusedItem = horizontalRepeater.GetOrCreateElement(listIndexes[riverIndex]); var button = TreeHelper.FindVisualChild <Button>(lastFocusedItem); if (button != null) { button.Focus(FocusState.Programmatic); button.StartBringIntoView(); canTap = true; e.Handled = true; } } } } catch { Debug.WriteLine("Do not scroll too fast!!!"); } } break; case VirtualKey.Down: case VirtualKey.GamepadDPadDown: case VirtualKey.GamepadLeftThumbstickDown: { ////Last river //BringIntoViewOptions options = new BringIntoViewOptions //{ // VerticalOffset = -50.0, // AnimationDesired = true //}; //var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Down, findNextElementOptions); //if (candidate != null && candidate is Control) //{ // (candidate as Control).StartBringIntoView(); // (candidate as Control).Focus(FocusState.Programmatic); // e.Handled = true; //} if (!canTap) { return; } canTap = false; riverIndex++; if (riverIndex > listIndexes.Count - 1) { riverIndex--; e.Handled = true; return; } try { Debug.WriteLine("River index: " + riverIndex); var grid = VerticalRepeater.TryGetElement(riverIndex) as Grid; if (grid != null) { grid.StartBringIntoView(); var horizontalRepeater = TreeHelper.FindVisualChild <ItemsRepeater>(grid); if (horizontalRepeater != null) { horizontalRepeater.UpdateLayout(); var lastFocusedItem = horizontalRepeater.GetOrCreateElement(listIndexes[riverIndex]); var button = TreeHelper.FindVisualChild <Button>(lastFocusedItem); //Scroll to last river if (riverIndex == listIndexes.Count - 1) { ScrollViewerHome.ChangeView(0.0f, ScrollViewerHome.ScrollableHeight, 1.0f); } if (button != null) { button.Focus(FocusState.Programmatic); button.StartBringIntoView(); canTap = true; e.Handled = true; } } } } catch { Debug.WriteLine("Do not scroll too fast!!!"); } } break; case VirtualKey.Left: case VirtualKey.GamepadDPadLeft: case VirtualKey.GamepadLeftThumbstickLeft: { var parent = TreeHelper.FindParentByName <ItemsRepeater>(sender as Button, "HorizontalRepeater"); FindNextElementOptions findNextElementOptions1 = new FindNextElementOptions { SearchRoot = parent, XYFocusNavigationStrategyOverride = XYFocusNavigationStrategyOverride.Projection }; var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Left, findNextElementOptions1); if (candidate != null && candidate is Control) { (candidate as Control).StartBringIntoView(); (candidate as Control).Focus(FocusState.Programmatic); e.Handled = true; } else { ShellPage.shellPage.navigationView.IsPaneOpen = true; e.Handled = true; } } break; case VirtualKey.Right: case VirtualKey.GamepadDPadRight: case VirtualKey.GamepadLeftThumbstickRight: { } break; case VirtualKey.GamepadA: case VirtualKey.Enter: case VirtualKey.Space: { } break; default: break; } } catch { } finally { //Debug.WriteLine(DateTime.Now); //await Task.Delay(1000); //Debug.WriteLine("sss " + DateTime.Now); //canTap = true; } }
private async void ButtonCardItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { FlipViewBanner.UpdateLayout(); VerticalRepeater.UpdateLayout(); FindNextElementOptions findNextElementOptions = new FindNextElementOptions { SearchRoot = ScrollViewerHome, XYFocusNavigationStrategyOverride = XYFocusNavigationStrategyOverride.NavigationDirectionDistance }; //Before move focus //Get current item data context var currentItem = (sender as Button).DataContext as ProductItem; var currentFocusElement = FocusManager.GetFocusedElement() as Button; try { switch (e.OriginalKey) { case VirtualKey.Up: case VirtualKey.GamepadDPadUp: case VirtualKey.GamepadLeftThumbstickUp: { BringIntoViewOptions options = new BringIntoViewOptions { VerticalOffset = 50.0, AnimationDesired = true }; //var tt = currentFocusElement.TransformToVisual(appWindow.Content); //Point currentFocusLeftTopPoint = tt.TransformPoint(new Point(appWindow.Bounds.Left, appWindow.Bounds.Top)); //Rect rect = new Rect(124, currentFocusLeftTopPoint.Y - 500, 1920, 500); //var nextFocus = FocusManager.FindNextFocusableElement(FocusNavigationDirection.Next, rect); var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Up, findNextElementOptions); if (candidate != null && candidate is Button) { (candidate as Control).StartBringIntoView(); (candidate as Control).Focus(FocusState.Programmatic); e.Handled = true; } else if (candidate != null) { var current = FlipViewBanner.SelectedItem; var currentContainer = FlipViewBanner.ContainerFromItem(current) as FlipViewItem; var result = await FocusManager.TryFocusAsync(currentContainer, FocusState.Programmatic); currentContainer.StartBringIntoView(); e.Handled = true; } } break; case VirtualKey.Down: case VirtualKey.GamepadDPadDown: case VirtualKey.GamepadLeftThumbstickDown: { //Last river BringIntoViewOptions options = new BringIntoViewOptions { VerticalOffset = -50.0, AnimationDesired = true }; var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Down, findNextElementOptions); if (candidate != null && candidate is Control) { (candidate as Control).StartBringIntoView(); (candidate as Control).Focus(FocusState.Programmatic); e.Handled = true; } } break; case VirtualKey.Left: case VirtualKey.GamepadDPadLeft: case VirtualKey.GamepadLeftThumbstickLeft: { var parent = TreeHelper.FindParentByName <ItemsRepeater>(sender as Button, "HorizontalRepeater"); FindNextElementOptions findNextElementOptions1 = new FindNextElementOptions { SearchRoot = parent, XYFocusNavigationStrategyOverride = XYFocusNavigationStrategyOverride.Projection }; var candidate = FocusManager.FindNextElement(FocusNavigationDirection.Left, findNextElementOptions1); if (candidate != null && candidate is Control) { (candidate as Control).StartBringIntoView(); (candidate as Control).Focus(FocusState.Programmatic); e.Handled = true; } else { ShellPage.shellPage.navigationView.IsPaneOpen = true; e.Handled = true; } } break; case VirtualKey.Right: case VirtualKey.GamepadDPadRight: case VirtualKey.GamepadLeftThumbstickRight: { } break; case VirtualKey.GamepadA: case VirtualKey.Enter: case VirtualKey.Space: { } break; default: break; } } catch { } finally { } }