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