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
            {
            }
        }