using PDF_Office.Helper; using PDF_Office.Model.Dialog.ToolsDialogs; using PDF_Office.ViewModels.Dialog.ToolsDialogs; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace PDF_Office.Views.Dialog.ToolsDialogs { /// /// MergeDialog.xaml 的交互逻辑 /// public partial class MergeDialog : UserControl { /// /// 当前显示了线段的Item /// private ListViewItem listViewItem = null; public MergeDialog() { InitializeComponent(); } private void Delete_Click(object sender, RoutedEventArgs e) { (DataContext as MergeDialogViewModel).DeleteItem((sender as Button).DataContext as MergeObject); } private void MergeView_PreviewMouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { var pos = e.GetPosition(MergeView); HitTestResult result = VisualTreeHelper.HitTest(MergeView, pos); if (result == null) { return; } var treeViewItem = CommonHelper.FindVisualParent(result.VisualHit); if (treeViewItem == null) { return; } DataObject dataObj = new DataObject(treeViewItem); DragDrop.DoDragDrop(MergeView, dataObj, DragDropEffects.Move); return; } } private void MergeView_Drop(object sender, DragEventArgs e) { ListViewItem souredata = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; MergeObject soureNode = souredata.DataContext as MergeObject; Point pos = e.GetPosition(MergeView); HitTestResult result = VisualTreeHelper.HitTest(MergeView, pos); if (result == null) { HiddenaAllLine(); return; } ListViewItem targetitem = CommonHelper.FindVisualParent(result.VisualHit); if (targetitem == null) { HiddenaAllLine(); return; } MergeObject targetNode = targetitem.DataContext as MergeObject; if (soureNode.Equals(targetNode)) { HiddenaAllLine(); return; } (DataContext as MergeDialogViewModel).MoveMerge(targetNode, soureNode); HiddenaAllLine(); } private void MergeView_DragOver(object sender, DragEventArgs e) { ListViewItem sourceitem = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; if (sourceitem == null) { return; } Point pos = e.GetPosition(MergeView); HitTestResult result = VisualTreeHelper.HitTest(MergeView, pos); if (result != null) { ListViewItem treeviewitem = CommonHelper.FindVisualParent(result.VisualHit); if (treeviewitem != null) { if (listViewItem == null) { listViewItem = treeviewitem; } else if (!listViewItem.Equals(treeviewitem)) { (listViewItem.DataContext as MergeObject).IsBackwards = false; (listViewItem.DataContext as MergeObject).IsForward = false; listViewItem = treeviewitem; } else { (listViewItem.DataContext as MergeObject).IsBackwards = false; (listViewItem.DataContext as MergeObject).IsForward = false; } if (listViewItem.Equals(sourceitem)) { return; } //鼠标位于上半部分显示实线,下半部分显示虚线 Point p = treeviewitem.TranslatePoint(new Point(0, 0), MergeView); if (pos.Y < p.Y + 16) { (treeviewitem.DataContext as MergeObject).IsBackwards = true; } else { (treeviewitem.DataContext as MergeObject).IsForward = true; } } } } private void MergeView_DragLeave(object sender, DragEventArgs e) { HiddenaAllLine(); } /// /// 清理线条显示,以及相关缓存对象 /// private void HiddenaAllLine() { if (listViewItem != null) { (listViewItem.DataContext as MergeObject).IsBackwards = false; (listViewItem.DataContext as MergeObject).IsForward = false; listViewItem = null; } } } }