internal void OnViewItemMouseDown(MultiSelectionTreeViewItem viewItem)
        {
            if (viewItem == null)
            {
                return;
            }
            switch (SelectionMode)
            {
            case SelectionModalities.Single:
                ManageSingleSelection(viewItem);
                break;

            case SelectionModalities.Multiple:
                ManageCtrlSelection(viewItem);
                break;

            case SelectionModalities.Keyboard:
                if (Keyboard.IsKeyDown(Key.LeftCtrl) ||
                    Keyboard.IsKeyDown(Key.RightCtrl) ||
                    Keyboard.IsKeyDown(Key.LeftShift) ||
                    Keyboard.IsKeyDown(Key.RightShift))
                {
                    ManageCtrlSelection(viewItem);
                }
                else
                {
                    ManageSingleSelection(viewItem);
                }
                break;

            default:
                break;
            }
            _lastClickedItem = viewItem.IsSelected == true ? viewItem : null;
        }
Example #2
0
 /// <summary>
 /// 取消所有子节点的选中
 /// </summary>
 public void UnSelectAllChildren()
 {
     if (Items != null && Items.Count > 0)
     {
         foreach (var item in Items)
         {
             if (item is MultiSelectionTreeViewItem)
             {
                 (item as MultiSelectionTreeViewItem).UnSelectAllChildren();
             }
             else
             {
                 MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem;
                 if (tvi != null)
                 {
                     tvi.UnSelectAllChildren();
                 }
             }
         }
     }
     if (IsSelected != false)
     {
         IsSelected = false;
     }
     //TODO:
     ParentTreeView.OnSelectionChnanged(this);
 }
Example #3
0
 /// <summary>
 /// 选中所有展开的节点
 /// </summary>
 public void SelectAllExpandChildren()
 {
     if (Items != null && Items.Count > 0)
     {
         if (!IsExpanded)
         {
             IsExpanded = true;
         }
         foreach (var item in Items)
         {
             if (item is MultiSelectionTreeViewItem)
             {
                 (item as MultiSelectionTreeViewItem).SelectAllExpandChildren();
             }
             else
             {
                 MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem;
                 if (tvi != null)
                 {
                     if (tvi.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
                     {
                         tvi.UpdateLayout();
                     }
                     tvi.SelectAllExpandChildren();
                 }
             }
         }
     }
     if (IsSelected != true)
     {
         IsSelected = true;
     }
     //TODO:
     ParentTreeView.OnSelectionChnanged(this);
 }
Example #4
0
 /// <summary>
 /// 展开所有子节点
 /// </summary>
 public void ExpandAllChildren()
 {
     if (Items != null && Items.Count > 0)
     {
         foreach (var item in Items)
         {
             if (item is MultiSelectionTreeViewItem)
             {
                 MultiSelectionTreeViewItem tvi = item as MultiSelectionTreeViewItem;
                 if (!tvi.IsExpanded)
                 {
                     tvi.IsExpanded = true;
                 }
                 tvi.ExpandAllChildren();
             }
             else
             {
                 MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem;
                 if (tvi != null)
                 {
                     if (!tvi.IsExpanded)
                     {
                         tvi.IsExpanded = true;
                     }
                     //如果子项还没有初始化容器,则刷新布局获取容器,保证取遍历的时候取到
                     if (tvi.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
                     {
                         tvi.UpdateLayout();
                     }
                     tvi.ExpandAllChildren();
                 }
             }
         }
     }
 }
Example #5
0
 protected override void OnKeyDown(KeyEventArgs e)
 {
     try
     {
         MultiSelectionTreeViewItem itemToSelect = null;
         if (e.Key == Key.Left)
         {
             this.IsExpanded = false;
         }
         else if (e.Key == Key.Right)
         {
             this.IsExpanded = true;
         }
         else if (e.Key == Key.Up)
         {
             int curentNodeIndex = this.ParentItemsControl.ItemContainerGenerator.IndexFromContainer(this);
             if (curentNodeIndex == 0)
             {
                 itemToSelect = this.ParentTreeViewItem;
             }
             else
             {
                 MultiSelectionTreeViewItem temp = null;
                 temp         = GetPreviousNodeAtSameLevel(this);
                 itemToSelect = GetLastVisibleChildNodeOf(temp);
             }
         }
         else if (e.Key == Key.Down)
         {
             if (this.IsExpanded && this.Items.Count > 0)
             {
                 itemToSelect = this.ItemContainerGenerator.ContainerFromIndex(0) as MultiSelectionTreeViewItem;
             }
             else
             {
                 itemToSelect = GetNexNodeAtSameLevel(this);
                 if (itemToSelect == null)
                 {
                     MultiSelectionTreeViewItem temp = this.ParentTreeViewItem;
                     while (itemToSelect == null && temp != null)
                     {
                         itemToSelect = GetNexNodeAtSameLevel(temp);
                         temp         = temp.ParentTreeViewItem;
                     }
                 }
             }
         }
         if (itemToSelect != null)
         {
             itemToSelect.Focus();
             itemToSelect.IsSelected = true;
             //TODO:Treeview逻辑
             ParentTreeView.OnViewItemMouseDown(itemToSelect);
         }
     }
     catch (Exception)
     {
         e.Handled = true;
     }
 }
 private void RemoveItemFromSelection(MultiSelectionTreeViewItem newItem)
 {
     if (_selectedItems.Contains(newItem))
     {
         _selectedItems.Remove(newItem);
     }
     OnTextChanged();
 }
 private void AddItemToSelection(MultiSelectionTreeViewItem newItem)
 {
     if (!_selectedItems.Contains(newItem))
     {
         _selectedItems.Add(newItem);
     }
     OnTextChanged();
 }
Example #8
0
        /// <summary>
        /// 获取上个可见节点,如果节点有子节点并且展开则取最后的子节点
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private MultiSelectionTreeViewItem GetLastVisibleChildNodeOf(MultiSelectionTreeViewItem item)
        {
            MultiSelectionTreeViewItem lastVisibleNode = item;

            while (lastVisibleNode != null && lastVisibleNode.Items.Count > 0 && lastVisibleNode.IsExpanded)
            {
                lastVisibleNode = lastVisibleNode.ItemContainerGenerator.ContainerFromIndex(lastVisibleNode.Items.Count - 1) as MultiSelectionTreeViewItem;
            }
            return(lastVisibleNode);
        }
Example #9
0
        /// <summary>
        /// 获取节点在树控件上的深度
        /// </summary>
        /// <returns></returns>
        public int GetDepth()
        {
            MultiSelectionTreeViewItem parent = this;

            while (parent.ParentTreeViewItem != null)
            {
                return(parent.ParentTreeViewItem.GetDepth() + 1);
            }
            return(0);
        }
        private void ManageSingleSelection(MultiSelectionTreeViewItem viewItem)
        {
            bool?isMultiSelected = viewItem.IsSelected;

            UnSelectAll();
            if (isMultiSelected == true)
            {
                viewItem.IsSelected = isMultiSelected;
                AddItemToSelection(viewItem);
            }
        }
        private void ManageCtrlSelection(MultiSelectionTreeViewItem viewItem)
        {
            bool?isMultiSelected = viewItem.IsSelected;

            if (isMultiSelected == true)
            {
                AddItemToSelection(viewItem);
            }
            else
            {
                RemoveItemFromSelection(viewItem);
            }
        }
 internal void OnSelectionChnanged(MultiSelectionTreeViewItem viewItem)
 {
     if (viewItem == null)
     {
         return;
     }
     if (viewItem.IsSelected == true)
     {
         AddItemToSelection(viewItem);
     }
     else
     {
         RemoveItemFromSelection(viewItem);
     }
 }
Example #13
0
 /// <summary>
 /// 取消所有父节点的选中
 /// </summary>
 public void UnSelectAllParent()
 {
     _isUnSelectParent = true;
     try
     {
         MultiSelectionTreeViewItem parent = ParentTreeViewItem;
         while (parent != null && parent.IsSelected != false)
         {
             bool isSelected = false;
             foreach (var item in parent.Items)
             {
                 MultiSelectionTreeViewItem viewItem = null;
                 if (item is MultiSelectionTreeViewItem)
                 {
                     viewItem = item as MultiSelectionTreeViewItem;
                 }
                 else
                 {
                     viewItem = parent.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem;
                 }
                 if (viewItem == null || viewItem.IsSelected != false)
                 {
                     isSelected = true;
                     break;
                 }
             }
             if (isSelected)
             {
                 parent.IsSelected = null;
             }
             else
             {
                 parent.IsSelected = false;
             }
             parent = parent.ParentTreeViewItem;
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
     finally
     {
         _isUnSelectParent = false;
     }
 }
Example #14
0
        /// <summary>
        /// 获取同级别的下一个节点
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private MultiSelectionTreeViewItem GetNexNodeAtSameLevel(MultiSelectionTreeViewItem item)
        {
            if (item == null)
            {
                return(null);
            }
            MultiSelectionTreeViewItem nextNodeAtSame = null;

            if (item.ParentItemsControl != null)
            {
                int index = item.ParentItemsControl.ItemContainerGenerator.IndexFromContainer(item);
                if (index <= item.Items.Count - 1)
                {
                    nextNodeAtSame = item.ParentItemsControl.ItemContainerGenerator.ContainerFromIndex(index + 1) as MultiSelectionTreeViewItem;
                }
            }
            return(nextNodeAtSame);
        }
Example #15
0
        /// <summary>
        /// 获取与某节点处于同意等级,并且此节点的同等级的上个节点
        /// </summary>
        /// <param name="item">传入的节点</param>
        /// <returns>节点同意等级的上个节点</returns>
        private MultiSelectionTreeViewItem GetPreviousNodeAtSameLevel(MultiSelectionTreeViewItem item)
        {
            if (item == null)
            {
                return(null);
            }

            MultiSelectionTreeViewItem previousNodeAtSameLevel = null;

            if (item.ParentItemsControl != null)
            {
                int index = item.ParentItemsControl.ItemContainerGenerator.IndexFromContainer(item);
                if (index > 0)
                {
                    previousNodeAtSameLevel = item.ParentItemsControl.ItemContainerGenerator.ContainerFromIndex(index - 1) as MultiSelectionTreeViewItem;
                }
            }
            return(previousNodeAtSameLevel);
        }
        private static void OnIsDropDownOpenChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            CheckBoxTreeView cb = (CheckBoxTreeView)d;

            if (cb._poup != null)
            {
                if ((bool)e.NewValue)
                {
                    cb.Dispatcher.BeginInvoke(DispatcherPriority.Send, (DispatcherOperationCallback) delegate(object arg)
                    {
                        //展开所有子节点
                        if (cb._treeView != null && cb.ItemsSource != null)
                        {
                            foreach (var item in cb._treeView.Items)
                            {
                                if (item is MultiSelectionTreeViewItem)
                                {
                                    (item as MultiSelectionTreeViewItem).IsExpanded = true;
                                }
                                else
                                {
                                    MultiSelectionTreeViewItem tvi = cb._treeView.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem;
                                    if (tvi != null)
                                    {
                                        if (!tvi.IsExpanded)
                                        {
                                            tvi.IsExpanded = true;
                                        }
                                        //如果子项还没有初始化容器,则刷新布局获取容器,保证取遍历的时候取到
                                        if (tvi.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
                                        {
                                            tvi.UpdateLayout();
                                        }
                                        tvi.ExpandAllChildren();
                                    }
                                }
                            }
                        }
                        return(null);
                    }, cb);
                }
            }
        }
Example #17
0
        private static void OnSelectedExChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            MultiSelectionTreeViewItem tvi = d as MultiSelectionTreeViewItem;

            if ((bool?)e.NewValue != (bool?)e.OldValue)
            {
                tvi.IsSelected = (bool?)e.NewValue;
                if ((bool?)e.NewValue == true)
                {
                    tvi.OnSelectedEx();
                }
                else if ((bool?)e.NewValue == false)
                {
                    tvi.OnUnselectedEx();
                }
                else
                {
                    //tvi.OnUnselectedEx();
                }
            }
        }
 private void UnSelectAll()
 {
     if (Items != null && Items.Count > 0)
     {
         foreach (var item in Items)
         {
             if (item is MultiSelectionTreeViewItem)
             {
                 (item as MultiSelectionTreeViewItem).UnSelectAllChildren();
             }
             else
             {
                 MultiSelectionTreeViewItem tvi = this.ItemContainerGenerator.ContainerFromItem(item) as MultiSelectionTreeViewItem;
                 if (tvi != null)
                 {
                     tvi.UnSelectAllChildren();
                 }
             }
         }
     }
 }