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; } }
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); } } }
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); } } } }
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); } }
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); } }