Пример #1
0
        private void SelectWithShift(TreeViewExItem item)
        {
            object firstSelectedItem;

            if (lastShiftRoot != null)
            {
                firstSelectedItem = lastShiftRoot;
            }
            else
            {
                // Get the first item in the SelectedItems that is also bound to the Tree.
                firstSelectedItem = treeViewEx.SelectedItems.Cast <object>().FirstOrDefault((x) => { return(treeViewEx.GetTreeViewItemFor(x) != null); });
            }

            if (firstSelectedItem != null)
            {
                TreeViewExItem shiftRootItem = treeViewEx.GetTreeViewItemsFor(new List <object> {
                    firstSelectedItem
                }).First();

                List <object> itemsToSelect   = treeViewEx.GetNodesToSelectBetween(shiftRootItem, item).Select(x => x.DataContext).ToList();
                List <object> itemsToUnSelect = treeViewEx.SelectedItems.Cast <object>().ToList();

                ModifySelection(itemsToSelect, itemsToUnSelect);
            }
            else
            {   // Fall-back to sigle selection
                List <object> itemsToUnSelect = treeViewEx.SelectedItems.Cast <object>().ToList();
                if (itemsToUnSelect.Contains(item.DataContext))
                {
                    itemsToUnSelect.Remove(item.DataContext);
                }
                ModifySelection(item.DataContext, itemsToUnSelect);
            }
        }
Пример #2
0
        private void SelectWithShift(TreeViewExItem item)
        {
            object firstSelectedItem;

            if (lastShiftRoot != null)
            {
                firstSelectedItem = lastShiftRoot;
            }
            else
            {
                if (treeViewEx.SelectedItems.Count > 0)
                {
                    firstSelectedItem = treeViewEx.SelectedItems[0];
                }
                else
                {
                    firstSelectedItem = null;
                }
            }

            TreeViewExItem shiftRootItem = treeViewEx.GetTreeViewItemsFor(new List <object> {
                firstSelectedItem
            }).First();

            List <object> itemsToSelect   = treeViewEx.GetNodesToSelectBetween(shiftRootItem, item).Select(x => x.DataContext).ToList();
            List <object> itemsToUnSelect = ((IEnumerable <object>)treeViewEx.SelectedItems).ToList();

            ModifySelection(itemsToSelect, itemsToUnSelect);
        }
Пример #3
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);
        }