重写「ActionViewer」类的「OnDragOver」方法
This commit is contained in:
		@@ -17,6 +17,7 @@ using System.Windows.Media;
 | 
			
		||||
using System.Windows.Media.Imaging;
 | 
			
		||||
using System.Windows.Navigation;
 | 
			
		||||
using System.Windows.Shapes;
 | 
			
		||||
using Deedy.Activity.Helpers;
 | 
			
		||||
 | 
			
		||||
namespace Deedy.Activity
 | 
			
		||||
{
 | 
			
		||||
@@ -745,7 +746,7 @@ namespace Deedy.Activity
 | 
			
		||||
        }
 | 
			
		||||
        protected internal bool _CanDropInParent = false;       // 通过组装校验逻辑设置此字段
 | 
			
		||||
        protected internal bool _CanDropChild = false;          // 通过组装校验逻辑设置此字段
 | 
			
		||||
        protected internal DropPlacement _DropPlacement = DropPlacement.Uncertain;      // 用于最终放置逻辑
 | 
			
		||||
        protected internal DropPlacement _DropPlacement = DropPlacement.UnDragged;      // 用于最终放置逻辑
 | 
			
		||||
        protected override void OnDragOver(DragEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            //HACK:这里要考虑父容器的布局方向
 | 
			
		||||
@@ -756,22 +757,21 @@ namespace Deedy.Activity
 | 
			
		||||
                if (this.TitleContainer != null && this.TitleContainer.Visibility == Visibility.Visible)
 | 
			
		||||
                    hitElement = this.TitleContainer;
 | 
			
		||||
 | 
			
		||||
                Point currentPoint = e.GetPosition(hitElement);
 | 
			
		||||
                if (this._CanDropInParent && (currentPoint.Y < 10 || currentPoint.Y < 10))
 | 
			
		||||
                {
 | 
			
		||||
                    this._DropPlacement = DropPlacement.BeforeMe;
 | 
			
		||||
                this._DropPlacement = this.ActionElement.Help_CheckDropPlacement(hitElement.RenderSize, e.GetPosition(hitElement));
 | 
			
		||||
                if (false
 | 
			
		||||
                    || (this._CanDropInParent
 | 
			
		||||
                        && (this._DropPlacement == DropPlacement.BeforeMe
 | 
			
		||||
                            || this._DropPlacement == DropPlacement.BehindMe
 | 
			
		||||
                            || this._DropPlacement == DropPlacement.ReplaceMe
 | 
			
		||||
                            )
 | 
			
		||||
                        )
 | 
			
		||||
                    || (this._CanDropChild
 | 
			
		||||
                        && (this._DropPlacement == DropPlacement.Uncertain
 | 
			
		||||
                            || this._DropPlacement == DropPlacement.WithinMe
 | 
			
		||||
                            )
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                    this.UpdateDragAdorner(this._DropPlacement, (this.ActionElement?.ParentElement as ICombinedElement)?.Direction);
 | 
			
		||||
                }
 | 
			
		||||
                else if (this._CanDropInParent && (hitElement.ActualHeight - currentPoint.Y < 10 || hitElement.ActualWidth - currentPoint.X < 10))
 | 
			
		||||
                {
 | 
			
		||||
                    this._DropPlacement = DropPlacement.BehindMe;
 | 
			
		||||
                    this.UpdateDragAdorner(this._DropPlacement, (this.ActionElement?.ParentElement as ICombinedElement)?.Direction);
 | 
			
		||||
                }
 | 
			
		||||
                else if (this._CanDropChild)
 | 
			
		||||
                {
 | 
			
		||||
                    this._DropPlacement = DropPlacement.WithinMe;
 | 
			
		||||
                    this.UpdateDragAdorner(this._DropPlacement);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    this._DropPlacement = DropPlacement.Rejected;
 | 
			
		||||
 
 | 
			
		||||
@@ -87,9 +87,9 @@ namespace Deedy.Activity.Helpers
 | 
			
		||||
            DropPlacement result = DropPlacement.UnDragged;
 | 
			
		||||
            if (element != null)
 | 
			
		||||
            {
 | 
			
		||||
                double horRuler = size.Width / 3;
 | 
			
		||||
                double horRuler = size.Width / 4;
 | 
			
		||||
                if (horRuler > 20) horRuler = 20;
 | 
			
		||||
                double verRuler = size.Height / 3;
 | 
			
		||||
                double verRuler = size.Height / 4;
 | 
			
		||||
                if (verRuler > 20) verRuler = 20;
 | 
			
		||||
                LayoutDirection direction = LayoutDirection.Cannot;
 | 
			
		||||
                if (element is ICombinedElement)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user