Exemplo n.º 1
0
        private void OnCompleted(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem)
        {
            TreeBackground = Brushes.Transparent;
            TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);

            if (overlapArea == OverlapArea.Out)
            {
                return;
            }

            var draggingModel = draggingItem.DataContext as TreeViewModel;
            var overlapModel  = overlapItem?.DataContext as TreeViewModel;

            /*
             * 1. 拖动项是目标目录时,不做移动
             * 2. 拖动项是目标目录的直接或间接父节点时,不做移动
             */
            if (overlapModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapModel, true))
            {
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            Move(draggingModel, overlapModel, false, (overlapArea & OverlapArea.Up) == OverlapArea.Up);
        }
Exemplo n.º 2
0
        private void OnCompleted(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem)
        {
            TreeBackground = Brushes.Transparent;
            TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);

            if (overlapArea == OverlapArea.Out)
            {
                return;
            }

            var draggingModel      = draggingItem.DataContext as TreeViewModel;
            var overlapFolderModel = overlapItem?.DataContext as TreeViewModel;

            /*
             * 1. 拖动项是目标目录的直接子节点时,包括目标目录是根目录的情况,不做移动
             *    注:目标目录是根目录时,overlapItem 是 null
             * 2. 拖动项是目标目录时,不做移动
             * 3. 拖动项是目标目录的直接或间接父节点时,不做移动
             */
            if (draggingModel.Parent == overlapFolderModel ||
                draggingModel == overlapFolderModel ||
                overlapFolderModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapFolderModel))
            {
                return;
            }

            //TODO Move
        }
Exemplo n.º 3
0
        /// <summary>
        /// 若当前节点可见:
        /// 1.该节点以上的父节点均得可见
        /// 2.若该节点所有子节点均不可见,则该节点以下的子节点均得可见
        /// </summary>
        public void TryFilter(Predicate <T> filter)
        {
            if (filter == null)
            {
                TreeViewModelBase.Foreach(_source, n => n.Visibility = Visibility.Visible);
                return;
            }

            foreach (var nodeList in _childToParentNodeStack)
            {
                nodeList.ForEach(node =>
                {
                    node.Visibility = filter(node) ? Visibility.Visible : Visibility.Collapsed;

                    //父节点满足条件,则所有子节点都显示
                    //父节点不满足条件,则根据是否存在显示的子节点来决定
                    if (node.Nodes != null && node.Nodes.Any())
                    {
                        if (node.Visibility == Visibility.Visible)
                        {
                            TreeViewModelBase.Foreach((IEnumerable <T>)node.Nodes, n => n.Visibility = Visibility.Visible);
                        }
                        else
                        {
                            node.Visibility = node.Nodes.Any(n => n.Visibility == Visibility.Visible) ? Visibility.Visible : Visibility.Collapsed;
                        }
                    }
                });
            }
        }
Exemplo n.º 4
0
        private void OnOverlapItem(OverlapArea overlapArea, ListBoxItem overlapItem, ListBoxItem draggingItem)
        {
            var draggingModel = draggingItem.DataContext as TreeViewModel;

            draggingModel.IsDragSource = true;

            if (overlapArea == OverlapArea.Out)
            {
                TreeBackground = Brushes.Transparent;
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            var overlapModel = overlapItem?.DataContext as TreeViewModel;

            /*
             * 1. 拖动项是目标目录时,不做移动
             */
            if (overlapModel != null && overlapModel == draggingModel)
            {
                TreeBackground = Brushes.Transparent;
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            //根目录
            if (overlapModel == null)
            {
                TreeBackground = ColorUtil.GetBrushFromString("#d6ebff");
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
            }
            else
            {
                TreeBackground = Brushes.Transparent;

                TreeViewModelBase.Foreach(TreeCollection, m =>
                {
                    m.IsDragOverUp    = (overlapArea & OverlapArea.Up) == OverlapArea.Up;
                    m.IsDragOverDown  = (overlapArea & OverlapArea.Down) == OverlapArea.Down;
                    m.IsDragOverLeft  = (overlapArea & OverlapArea.Left) == OverlapArea.Left;
                    m.IsDragOverRight = (overlapArea & OverlapArea.Right) == OverlapArea.Right;
                    m.IsDragOver      = m == overlapModel;
                });
            }
        }
Exemplo n.º 5
0
        private void OnOverlapFolder(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem)
        {
            if (overlapArea == OverlapArea.Out)
            {
                TreeBackground = Brushes.Transparent;
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            var overlapModel  = overlapItem?.DataContext as TreeViewModel;
            var draggingModel = draggingItem.DataContext as TreeViewModel;

            /*
             * 1. 拖动项是目标目录时,不做移动
             * 2. 拖动项是目标目录的直接或间接父节点时,不做移动
             */
            if (overlapModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapModel, true))
            {
                TreeBackground = Brushes.Transparent;
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            //根目录
            if (overlapModel == null)
            {
                TreeBackground = ColorUtil.GetBrushFromString("#d6ebff");
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
            }
            else
            {
                TreeBackground          = Brushes.Transparent;
                overlapModel.IsExpanded = true;

                TreeViewModelBase.Foreach(TreeCollection, m =>
                {
                    m.IsDragOverUp   = (overlapArea & OverlapArea.Up) == OverlapArea.Up;
                    m.IsDragOverDown = (overlapArea & OverlapArea.Down) == OverlapArea.Down;
                    m.IsDragOver     = m == overlapModel;
                });
            }
        }
Exemplo n.º 6
0
        private void OnOverlapItem(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem)
        {
            if (overlapArea == OverlapArea.Out)
            {
                TreeBackground = Brushes.Transparent;
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            var overlapFolderModel = overlapItem?.DataContext as TreeViewModel;
            var draggingModel      = draggingItem.DataContext as TreeViewModel;

            /*
             * 1. 拖动项是目标目录的直接子节点时,包括目标目录是根目录的情况,不做移动
             *    注:目标目录是根目录时,overlapItem 是 null
             * 2. 拖动项是目标目录时,不做移动
             * 3. 拖动项是目标目录的直接或间接父节点时,不做移动
             */
            if (draggingModel.Parent == overlapFolderModel ||
                draggingModel == overlapFolderModel ||
                overlapFolderModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapFolderModel))
            {
                TreeBackground = Brushes.Transparent;
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            if (overlapFolderModel == null)
            {
                TreeBackground = ColorUtil.GetBrushFromString("#d6ebff");
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }
            else
            {
                overlapFolderModel.IsExpanded = true;

                TreeBackground = Brushes.Transparent;
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = m == overlapFolderModel);
            }
        }
Exemplo n.º 7
0
        private void OnCompleted(OverlapArea overlapArea, ListBoxItem overlapItem, ListBoxItem draggingItem)
        {
            TreeBackground = Brushes.Transparent;
            TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = m.IsDragSource = false);

            if (overlapArea == OverlapArea.Out)
            {
                return;
            }

            var draggingModel = draggingItem.DataContext as TreeViewModel;
            var overlapModel  = overlapItem?.DataContext as TreeViewModel;

            /*
             * 1. 拖动项是目标目录时,不做移动
             */
            if (overlapModel != null && overlapModel == draggingModel)
            {
                TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false);
                return;
            }

            //Move(draggingModel, overlapModel, false, (overlapArea & OverlapArea.Up) == OverlapArea.Up);
        }