Exemple #1
0
        private void EndRename(TextBox textBox)
        {
            if (textBox == null || textBox.Parent == null)
            {
                // Navigating away, do nothing
            }
            else if (FolderSettings.LayoutMode == FolderLayoutModes.GridView)
            {
                Popup     popup     = textBox.Parent as Popup;
                TextBlock textBlock = (popup.Parent as Grid).Children[1] as TextBlock;
                popup.IsOpen = false;
            }
            else if (FolderSettings.LayoutMode == FolderLayoutModes.TilesView)
            {
                Grid      grid      = textBox.Parent as Grid;
                TextBlock textBlock = grid.Children[0] as TextBlock;
                textBox.Visibility   = Visibility.Collapsed;
                textBlock.Visibility = Visibility.Visible;
            }

            textBox.LostFocus         -= RenameTextBox_LostFocus;
            textBox.KeyDown           -= RenameTextBox_KeyDown;
            FileNameTeachingTip.IsOpen = false;
            IsRenamingItem             = false;

            // Re-focus selected list item
            GridViewItem gridViewItem = FileList.ContainerFromItem(RenamingItem) as GridViewItem;

            gridViewItem?.Focus(FocusState.Programmatic);
        }
        private void Button_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
        {
            list.UpdateLayout();

            switch (e.Key)
            {
                case VirtualKey.Down:
                case VirtualKey.GamepadDPadDown:
                case VirtualKey.GamepadLeftThumbstickDown:
                    //Stores all gridviews(one row enabled)
                    if (listRivers.Count == 0)
                        listRivers = TreeHelper.FindVisualChildren<GridView>(list);
                    //Stores the selected index item of each river
                    if (listIndexsInEachRiver == null || listIndexsInEachRiver.Count == 0)
                    {
                        listIndexsInEachRiver = new List<int>();
                        foreach (var item in listRivers)
                        {
                            listIndexsInEachRiver.Add(item.SelectedIndex);
                        }
                    }

                    if (list != null && list.Items.Count > 0)
                    {
                        //Find the first river, including a textblock and a adaptive gridview
                        var firstRiver = list.ContainerFromIndex(0) as ListViewItem;
                        var gridview = TreeHelper.FindVisualChild<GridView>(firstRiver);
                        if (gridview != null && gridview.Items.Count > 0)
                        {
                            GridViewItem item = new GridViewItem();
                            if (listIndexsInEachRiver[0] == -1)
                            {
                                item = gridview.ContainerFromIndex(0) as GridViewItem;
                                listIndexsInEachRiver[0] = 0;
                            }
                            else
                            {
                                item = gridview.ContainerFromIndex(listIndexsInEachRiver[0]) as GridViewItem;
                                listIndexsInEachRiver[0] = gridview.SelectedIndex;
                            }

                            item.Focus(FocusState.Programmatic);
                            item.IsSelected = true;
                            e.Handled = true;
                        }
                    }

                    e.Handled = true;
                    break;
                case VirtualKey.Up:
                case VirtualKey.GamepadDPadUp:
                case VirtualKey.GamepadLeftThumbstickUp:
                    //Do nothing

                    e.Handled = true;
                    break;
                default:
                    break;
            }
        }
 public void RestoreFocus()
 {
     if (focusedItem != null)
     {
         focusedItem.Focus(FocusState.Keyboard);
         focusedItem = null;
     }
 }
        public XboxStationsPage()
        {
            this.InitializeComponent();

            stationsGridView.SingleSelectionFollowsFocus = true;

            long itemsSourceHandler = 0;

            itemsSourceHandler = stationsGridView.RegisterPropertyChangedCallback(GridView.ItemsSourceProperty, new DependencyPropertyChangedCallback(async(obj, dp) =>
            {
                if (obj.GetValue(dp) != null)
                {
                    //try and force focus on the first item when we load this page.
                    stationsGridView.UnregisterPropertyChangedCallback(GridView.ItemsSourceProperty, itemsSourceHandler);

                    //wait until we can get an item from the station grid view to focus. this is a hack but it'll have to do.
                    GridViewItem firstItem = null;
                    do
                    {
                        firstItem = (GridViewItem)stationsGridView.ContainerFromIndex(0);
                        await Task.Delay(50);
                    } while (firstItem == null);

                    firstItem.Focus(FocusState.Keyboard);
                }
            }));

#if DEBUG
            this.GotFocus += (object sender, RoutedEventArgs e) =>
            {
                FrameworkElement focus = FocusManager.GetFocusedElement() as FrameworkElement;
                if (focus != null)
                {
                    System.Diagnostics.Debug.WriteLine("got focus: " + focus.Name + " (" +
                                                       focus.GetType().ToString() + ")");
                }
            };
#endif
        }
        private void ListView_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
        {
            list.UpdateLayout();

            if (listIndexsInEachRiver == null)
            {
                //Stores all gridviews(one row enabled)
                listRivers = TreeHelper.FindVisualChildren<GridView>(list);
                //Stores the selected index item of each river
                listIndexsInEachRiver = new List<int>();
                foreach (var item in listRivers)
                {
                    listIndexsInEachRiver.Add(item.SelectedIndex);
                }
            }

            //Declare:
            //Each river contains a title and a gridview(one row enabled). Remember it!!!

            //Current river
            var listItem = list.ContainerFromIndex(riverIndexInAllRivers) as ListViewItem;
            //Current GridView in current river
            var currentRiver = TreeHelper.FindVisualChild<GridView>(listItem);
            Debug.WriteLine("currentRiver.ActualWidth: " + currentRiver.ActualWidth);

            //Current item index in current river
            int itemIndexInCurrentRiver = currentRiver.SelectedIndex;

            //Current river index in all rivers
            //int riverIndexInCurrentRivers = listRivers.IndexOf(currentRiver);

            switch (e.Key)
            {
                case VirtualKey.Down:
                case VirtualKey.GamepadDPadDown:
                case VirtualKey.GamepadLeftThumbstickDown:
                    if (riverIndexInAllRivers + 1 < listRivers.Count)
                    {
                        var nextRiver = listRivers[riverIndexInAllRivers + 1];
                        nextRiver.Focus(FocusState.Programmatic);
                        if (nextRiver.Items != null && nextRiver.Items.Count > 0)
                        {
                            GridViewItem item = new GridViewItem();
                            if (listIndexsInEachRiver[riverIndexInAllRivers + 1] == -1)
                            {
                                item = nextRiver.ContainerFromIndex(0) as GridViewItem;
                                listIndexsInEachRiver[riverIndexInAllRivers + 1] = 0;
                            }
                            else
                            {
                                item = nextRiver.ContainerFromIndex(listIndexsInEachRiver[riverIndexInAllRivers + 1]) as GridViewItem;
                                listIndexsInEachRiver[riverIndexInAllRivers] = itemIndexInCurrentRiver;
                            }

                            item.Focus(FocusState.Programmatic);
                            item.IsSelected = true;
                            item.StartBringIntoView();
                        }

                        riverIndexInAllRivers++;
                    }

                    e.Handled = true;
                    break;
                case VirtualKey.Up:
                case VirtualKey.GamepadDPadUp:
                case VirtualKey.GamepadLeftThumbstickUp:
                    if (riverIndexInAllRivers - 1 >= 0)
                    {
                        var previousRiver = listRivers[riverIndexInAllRivers - 1];
                        previousRiver.Focus(FocusState.Programmatic);
                        if (previousRiver.Items != null && previousRiver.Items.Count > 0)
                        {
                            GridViewItem item = new GridViewItem();
                            if (listIndexsInEachRiver[riverIndexInAllRivers - 1] == -1) //Probably never happen
                            {
                                item = previousRiver.ContainerFromIndex(0) as GridViewItem;
                                listIndexsInEachRiver[riverIndexInAllRivers] = 0;
                            }
                            else
                            {
                                item = previousRiver.ContainerFromIndex(listIndexsInEachRiver[riverIndexInAllRivers - 1]) as GridViewItem;
                                listIndexsInEachRiver[riverIndexInAllRivers] = itemIndexInCurrentRiver;
                            }

                            item.Focus(FocusState.Programmatic);
                            item.IsSelected = true;
                            item.StartBringIntoView();
                        }

                        riverIndexInAllRivers--;
                    }

                    e.Handled = true;
                    break;
                case VirtualKey.Left:
                case VirtualKey.GamepadDPadLeft:
                case VirtualKey.GamepadLeftThumbstickLeft:
                    if (itemIndexInCurrentRiver - 1 >= 0)
                    {
                        currentRiver.Focus(FocusState.Programmatic);

                        GridViewItem item = new GridViewItem();
                        item = currentRiver.ContainerFromIndex(listIndexsInEachRiver[riverIndexInAllRivers]) as GridViewItem;
                        listIndexsInEachRiver[riverIndexInAllRivers] = itemIndexInCurrentRiver - 1;

                        item.Focus(FocusState.Programmatic);
                        item.IsSelected = true;
                        item.StartBringIntoView();

                        e.Handled = false;
                    }
                    else
                        e.Handled = true;
                    break;
                case VirtualKey.Right:
                case VirtualKey.GamepadDPadRight:
                case VirtualKey.GamepadLeftThumbstickRight:
                    if (itemIndexInCurrentRiver + 1 <= currentRiver.Items.Count - 1)
                    {
                        currentRiver.Focus(FocusState.Programmatic);

                        GridViewItem item = new GridViewItem();
                        item = currentRiver.ContainerFromIndex(listIndexsInEachRiver[riverIndexInAllRivers]) as GridViewItem;
                        listIndexsInEachRiver[riverIndexInAllRivers] = itemIndexInCurrentRiver + 1;

                        item.UpdateLayout();
                        item.Focus(FocusState.Programmatic);
                        item.IsSelected = true;
                        item.StartBringIntoView();

                        e.Handled = false;
                    }
                    else
                        e.Handled = true;
                    break;
                default:
                    break;
            }
        }