鼠标移动比重绘 wpf 快
mouse move is faster than redraw wpf
我正在定义继承自 class Shape
的形状并实现 'Geometry' 属性.
这是一个例子:
public class Landmark : Shape
{
public override bool IsInBounds(Point currentLocation)
{
return (((currentLocation.X >= Location.X - 3) && (currentLocation.X <= Location.X + 3)) && ((currentLocation.Y >= Location.Y - 3) && (currentLocation.Y <= Location.Y + 3)));
}
protected override Geometry DefiningGeometry
{
get
{
var landMark = new EllipseGeometry {Center = Location};
Stroke = Brushes.Red;
return landMark;
}
}
protected override void OnIsMouseDirectlyOverChanged(DependencyPropertyChangedEventArgs e)
{
StrokeThickness = IsMouseDirectlyOver ? 12 : 6;
Mouse.OverrideCursor = IsMouseDirectlyOver ? Mouse.OverrideCursor = Cursors.ScrollAll : Mouse.OverrideCursor = Cursors.Arrow;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
Location = e.GetPosition(this);
InvalidateVisual();
}
}
}
当我点击 Shape
并移动鼠标时,我希望 Shape
在新位置重新绘制 - 它确实有效。
但是,如果我快速移动鼠标 "too",那么我就是 "leaving" OnMouseMove
事件,并且 shape
卡在最后一个位置鼠标指针和 Shape
的位置在 "sync".
这样的问题能解决吗?
是的,by capturing the Mouse。
为此,您必须确定何时捕获以及何时释放。由于您希望它与鼠标左键一起使用,因此您可以在 OnMouseDown
中捕获并在 OnMouseUp
中释放鼠标。
我正在定义继承自 class Shape
的形状并实现 'Geometry' 属性.
这是一个例子:
public class Landmark : Shape
{
public override bool IsInBounds(Point currentLocation)
{
return (((currentLocation.X >= Location.X - 3) && (currentLocation.X <= Location.X + 3)) && ((currentLocation.Y >= Location.Y - 3) && (currentLocation.Y <= Location.Y + 3)));
}
protected override Geometry DefiningGeometry
{
get
{
var landMark = new EllipseGeometry {Center = Location};
Stroke = Brushes.Red;
return landMark;
}
}
protected override void OnIsMouseDirectlyOverChanged(DependencyPropertyChangedEventArgs e)
{
StrokeThickness = IsMouseDirectlyOver ? 12 : 6;
Mouse.OverrideCursor = IsMouseDirectlyOver ? Mouse.OverrideCursor = Cursors.ScrollAll : Mouse.OverrideCursor = Cursors.Arrow;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
Location = e.GetPosition(this);
InvalidateVisual();
}
}
}
当我点击 Shape
并移动鼠标时,我希望 Shape
在新位置重新绘制 - 它确实有效。
但是,如果我快速移动鼠标 "too",那么我就是 "leaving" OnMouseMove
事件,并且 shape
卡在最后一个位置鼠标指针和 Shape
的位置在 "sync".
这样的问题能解决吗?
是的,by capturing the Mouse。
为此,您必须确定何时捕获以及何时释放。由于您希望它与鼠标左键一起使用,因此您可以在 OnMouseDown
中捕获并在 OnMouseUp
中释放鼠标。