Example #1
0
        protected override void OnKeyUp(KeyEventArgs e)
        {
            base.OnKeyUp(e);
            if (!e.Handled)
            {
                Key key = e.Key;
                switch (key)
                {
                case Key.Left:
                case Key.Right:
                case Key.Up:
                case Key.Down:
                case Key.Add:
                case Key.Subtract:
                case Key.Space:
                    IEnumerable <TreeViewExItem> items = TreeViewEx.RecursiveTreeViewItemEnumerable(ParentTreeView, false);
                    TreeViewExItem focusedItem         = items.Where <TreeViewExItem>(x => x.IsFocused).FirstOrDefault();

                    if (focusedItem != null)
                    {
                        focusedItem.BringIntoView(new Rect(1, 1, 1, 1));
                    }
                    break;
                }
            }
        }
Example #2
0
        public void SelectLast()
        {
            TreeViewExItem item = TreeViewEx.RecursiveTreeViewItemEnumerable(treeViewEx, false).LastOrDefault();

            if (item != null)
            {
                Select(item);
            }
        }
Example #3
0
        private TreeViewExItem GetFocusedItem()
        {
            foreach (var item in TreeViewEx.RecursiveTreeViewItemEnumerable(treeViewEx, false))
            {
                if (item.IsFocused)
                {
                    return(item);
                }
            }

            return(null);
        }
Example #4
0
        public void SelectPreviousFromKey()
        {
            List <TreeViewExItem> items = TreeViewEx.RecursiveTreeViewItemEnumerable(treeViewEx, true).ToList();
            TreeViewExItem        item;
            TreeViewExItem        focusedItem = GetFocusedItem();

            item = treeViewEx.GetPreviousItem(focusedItem, items);

            if (item == null)
            {
                return;
            }

            // if ctrl is pressed just focus it, so it can be selected by space. Otherwise select it.
            if (IsControlKeyDown)
            {
                FocusHelper.Focus(item);
            }
            else
            {
                SelectCore(item);
            }
        }
Example #5
0
 public void ApplyTemplate()
 {
     borderSelectionLogic = new BorderSelectionLogic(
         treeViewEx,
         TreeViewEx.RecursiveTreeViewItemEnumerable(treeViewEx, false));
 }
Example #6
0
        private void SelectCore(TreeViewExItem item)
        {
            if (IsControlKeyDown)
            {
                if (!treeViewEx.CheckSelectionAllowed(item.DataContext, true))
                {
                    return;
                }

                if (treeViewEx.SelectedItems.Contains(item.DataContext))
                {
                    throw new InvalidOperationException("The item must not be contained.");
                }

                treeViewEx.SelectedItems.Add(item.DataContext);
                item.IsSelected = true;
                lastShiftRoot   = item.DataContext;
            }
            else if (IsShiftKeyDown && treeViewEx.SelectedItems.Count > 0)
            {
                object         firstSelectedItem = lastShiftRoot ?? treeViewEx.SelectedItems.First();
                TreeViewExItem shiftRootItem     = treeViewEx.GetTreeViewItemsFor(new List <object> {
                    firstSelectedItem
                }).First();

                IEnumerable <object> items = treeViewEx.GetNodesToSelectBetween(shiftRootItem, item).Select(x => x.DataContext);

                IEnumerable <object> itemsToSelect   = GetItemsNotInCollection((IEnumerable <object>)treeViewEx.SelectedItems, items);
                IEnumerable <object> itemsToUnSelect = GetItemsNotInCollection(items, (IEnumerable <object>)treeViewEx.SelectedItems);
                if (!treeViewEx.CheckSelectionAllowed(itemsToSelect, itemsToUnSelect))
                {
                    return;
                }

                treeViewEx.SelectedItems.Clear();

                foreach (var node in TreeViewEx.RecursiveTreeViewItemEnumerable(treeViewEx, false))
                {
                    if (items.Contains(node.DataContext))
                    {
                        treeViewEx.SelectedItems.Add(node.DataContext);
                        node.IsSelected = true;
                    }
                    else
                    {
                        node.IsSelected = false;
                    }
                }
            }
            else
            {
                if (!treeViewEx.CheckSelectionAllowed(item.DataContext, true))
                {
                    return;
                }

                // check if selection is already item, otherwise set it
                if (!(treeViewEx.SelectedItems.Count == 1 && treeViewEx.SelectedItems[0] == item.DataContext))
                {
                    foreach (var treeViewItem in TreeViewEx.RecursiveTreeViewItemEnumerable(treeViewEx, false))
                    {
                        treeViewItem.IsSelected = false;
                    }

                    treeViewEx.SelectedItems.Clear();
                    treeViewEx.SelectedItems.Add(item.DataContext);
                }

                lastShiftRoot = item.DataContext;
            }

            FocusHelper.Focus(item);
        }