Exemple #1
0
        private void TreeView_DragLeave_1(object sender, DragEventArgs e)
        {
            if (sender is StackPanel)
            {
                return;
            }

            if (!e.Data.GetDataPresent(typeof(DragInfo)))
            {
                return;
            }

            DragInfo data = e.Data.GetData(typeof(DragInfo)) as DragInfo;

            if (data == null)
            {
                return;
            }

            if (data.PanelID != TreeID)
            {
                return;
            }

            Border panel = GetBorderFromMousePos(e);

            if (panel == null)
            {
                if (_DragOverItem != null)
                {
                    _DragOverItem.BorderThickness = new Thickness(0);
                }
                _DragOverItem = null;
            }
        }
Exemple #2
0
        private void Border_Drop(object sender, DragEventArgs e)
        {
            if (DragInsertEvent == null)
            {
                return;
            }

            if (!e.Data.GetDataPresent(typeof(DragInfo)))
            {
                return;
            }

            DragInfo data  = e.Data.GetData(typeof(DragInfo)) as DragInfo;
            Border   panel = _DragOverItem;


            if (panel != null && panel != data.DragFrom && TreeID == data.PanelID)
            {
                panel.BorderThickness = new Thickness(0);

                DragInsertEventArgs insertEvent = new DragInsertEventArgs();
                insertEvent.DragFrom = data.DragFrom.DataContext;
                insertEvent.DragTo   = panel.DataContext;

                if (!_IsButtom)
                {
                    insertEvent.IsDropFront = true;
                }
                else
                {
                    insertEvent.IsDropFront = false;
                }

                DragInsertEvent(this, insertEvent);
            }
            else
            {
                if (_DragOverItem != null)
                {
                    _DragOverItem.BorderThickness = new Thickness(0);
                }
            }
        }
Exemple #3
0
        private void TreeView_DragOver(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(typeof(DragInfo)))
            {
                return;
            }

            DragInfo data = e.Data.GetData(typeof(DragInfo)) as DragInfo;

            if (data == null)
            {
                return;
            }

            if (data.PanelID != TreeID)
            {
                return;
            }

            Border panel = GetBorderFromMousePos(e);

            if (panel != null && panel != data.DragFrom && TreeID == data.PanelID)
            {
                if (_TreeView.Items[_TreeView.Items.Count - 1] == panel.DataContext)
                {
                    Point point = e.GetPosition(panel);
                    if (point.Y < panel.ActualHeight * 0.5d)
                    {
                        _IsButtom             = false;
                        panel.BorderThickness = new Thickness(0, 5, 0, 0);
                    }
                    else
                    {
                        _IsButtom             = true;
                        panel.BorderThickness = new Thickness(0, 0, 0, 5);
                    }
                }
            }
        }
Exemple #4
0
        private void Border_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (DragInsertEvent == null)
            {
                return;
            }

            Border panel = GetBorderFromMousePos(e);

            if (panel == null)
            {
                return;
            }

            if (e.LeftButton == MouseButtonState.Pressed && _TreeView.SelectedItem != null)
            {
                DragInfo dragInfo = new DragInfo();
                dragInfo.PanelID  = TreeID;
                dragInfo.DragFrom = panel;

                DataObject data = new DataObject(typeof(DragInfo), dragInfo);
                DragDrop.DoDragDrop(this, data, DragDropEffects.Move);
            }
        }
Exemple #5
0
        private void TreeView_DragEnter_1(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(typeof(DragInfo)))
            {
                return;
            }

            DragInfo data = e.Data.GetData(typeof(DragInfo)) as DragInfo;

            if (data == null)
            {
                return;
            }

            if (data.PanelID != TreeID)
            {
                return;
            }

            Border panel = GetBorderFromMousePos(e);

            if (panel == null)
            {
                return;
            }

            if (panel != null && TreeID == data.PanelID)
            {
                //清理之前的
                if (_DragOverItem != null)
                {
                    _DragOverItem.BorderThickness = new Thickness(0);
                }
                _DragOverItem = panel;

                if (_TreeView.Items[_TreeView.Items.Count - 1] == panel.DataContext)
                {
                    Point point = e.GetPosition(panel);
                    if (point.Y < panel.ActualHeight * 0.5d)
                    {
                        _IsButtom             = false;
                        panel.BorderThickness = new Thickness(0, 5, 0, 0);
                    }
                    else
                    {
                        _IsButtom             = true;
                        panel.BorderThickness = new Thickness(0, 0, 0, 5);
                    }
                }
                else
                {
                    _IsButtom             = false;
                    panel.BorderThickness = new Thickness(0, 5, 0, 0);
                }
            }
            else
            {
                //e.Effects = DragDropEffects.None;
            }

            //是否需要滚动
            Point panelPos = e.GetPosition(_TreeViewPanel);

            if (panelPos.Y < panel.ActualHeight)
            {
                _ScrollViewer.ScrollToVerticalOffset(_ScrollViewer.VerticalOffset - panel.ActualHeight);
            }
            else if (panelPos.Y > (this.ActualHeight - panel.ActualHeight))
            {
                _ScrollViewer.ScrollToVerticalOffset(_ScrollViewer.VerticalOffset + panel.ActualHeight);
            }
        }