2021-04-29 05:05:55 -07:00
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
using System.Windows;
|
|
|
|
using System.Windows.Documents;
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
|
|
|
namespace SourceGit.Views.Controls {
|
|
|
|
/// <summary>
|
|
|
|
/// 展示正在拖拽的视图
|
|
|
|
/// </summary>
|
|
|
|
public class DragDropAdorner : Adorner {
|
|
|
|
private Size renderSize;
|
|
|
|
private Brush renderBrush;
|
|
|
|
|
|
|
|
public struct PInPoint {
|
|
|
|
public int X;
|
|
|
|
public int Y;
|
|
|
|
|
|
|
|
public PInPoint(int x, int y) { X = x; Y = y; }
|
|
|
|
public PInPoint(double x, double y) { X = (int)x; Y = (int)y; }
|
|
|
|
}
|
|
|
|
|
|
|
|
[DllImport("user32.dll")]
|
|
|
|
static extern void GetCursorPos(ref PInPoint p);
|
|
|
|
|
|
|
|
public DragDropAdorner(FrameworkElement elem) : base(elem) {
|
|
|
|
renderSize = elem.RenderSize;
|
|
|
|
renderBrush = new VisualBrush(elem);
|
|
|
|
IsHitTestVisible = false;
|
2021-08-06 02:19:04 -07:00
|
|
|
Window.AddAdorner(elem, this);
|
2021-04-29 05:05:55 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
public void Remove() {
|
2021-08-06 02:19:04 -07:00
|
|
|
Window.RemoveAdorner(this);
|
2021-04-29 05:05:55 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
protected override void OnRender(DrawingContext dc) {
|
|
|
|
base.OnRender(dc);
|
|
|
|
|
|
|
|
PInPoint p = new PInPoint();
|
|
|
|
GetCursorPos(ref p);
|
|
|
|
|
|
|
|
Point pos = PointFromScreen(new Point(p.X, p.Y));
|
|
|
|
Rect rect = new Rect(pos.X, pos.Y, renderSize.Width, renderSize.Height);
|
|
|
|
|
|
|
|
dc.PushOpacity(1);
|
2021-08-06 02:19:04 -07:00
|
|
|
dc.DrawRectangle(FindResource("Brush.Window") as Brush, null, rect);
|
2021-04-29 05:05:55 -07:00
|
|
|
dc.DrawRectangle(renderBrush, null, rect);
|
|
|
|
dc.DrawRectangle(null, new Pen(Brushes.DeepSkyBlue, 2), rect);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|