1.直接使用thumb控件,绑定dragdelta事件,其中e.HorizontalChange和e.VerticalChange分别是移动的距离,然后自行调整thumb的显示位置(比如用RenderTransform或者margin)
thumb1.DragDelta += (s, e) => { var p = new Point(0,0); p.X += e.HorizontalChange; p.Y += e.VerticalChange; P1 = p; };
2.自定义UIElement的PointerMoved事件,大部分控件都派生于UIElement,可以直接自定义PointerMoved事件,自定义元素的拖动逻辑。如下图所示两个圆点是thumb拖动,而方块(StackPanel)则是自定义PointerMoved事件拖动。
rect_grid.PointerMoved += (s, e) => {
//获取鼠标
var p = e.GetCurrentPoint(this);
if (p.Properties.IsLeftButtonPressed||p.Properties.IsMiddleButtonPressed)
{
//获得移动距离
var deltaX = (p.Position.X - OldPosition.X);
var deltaY = (p.Position.Y - OldPosition.Y);
//重新设置两个thumb的位置
P1 = new Point(P1.X + deltaX, P1.Y + deltaY);
P2 = new Point(P2.X + deltaX, P2.Y + deltaY);
//根据P1/P2调整StackPanel位置
RePaint();
}
//调整基准位置
OldPosition = new Point(p.Position.X, p.Position.Y);
};
(end)