WPF中奇怪的形状调整大小行为

时间:2010-05-17 17:00:14

标签: c# wpf graphics drawing

我正在制作一个WPF应用程序,让用户可以绘制和调整形状大小。 调整大小部分是使用装饰器完成的,形状是我自己的派生自Shape的类。 例如,我有一个Polyline,对于每个点,我在其Thumb事件上装饰DragDelta处理程序:

    void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        PolylineEx polyline = this.AdornedElement as PolylineEx;
        ResizingThumb thumb = sender as ResizingThumb;

        int index = (int)thumb.Tag;

        Point newPoint = new Point(
            polyline.Points[index].X + e.HorizontalChange,
            polyline.Points[index].Y + e.VerticalChange);
        Trace.WriteLine(String.Format("Arranging point {0}:{1},{2}", index, newPoint.X, newPoint.Y));
        polyline.Points[index] = newPoint;
    }

void Thumb_DragDelta(object sender, DragDeltaEventArgs e) { PolylineEx polyline = this.AdornedElement as PolylineEx; ResizingThumb thumb = sender as ResizingThumb; int index = (int)thumb.Tag; Point newPoint = new Point( polyline.Points[index].X + e.HorizontalChange, polyline.Points[index].Y + e.VerticalChange); Trace.WriteLine(String.Format("Arranging point {0}:{1},{2}", index, newPoint.X, newPoint.Y)); polyline.Points[index] = newPoint; }

嗯,问题是,有时(经常),拖动拇指根本不光滑。首先我认为这是一个性能问题,因为每次都会创建一个新的(和其他东西),但后来我注意到有时候这个点设置在与位置无关的奇怪坐标上鼠标。

我还上传了一个示例项目HERE,知道wpf的人可以看看并告诉我发生了什么吗?

此外,如果有人想到更好的方法,那么任何反馈都会受到高度赞赏。

谢谢。

编辑:HERE是项目文件的新链接。

1 个答案:

答案 0 :(得分:0)

我最终回答了我自己的问题:)

我认为问题出在这里:

protected override System.Windows.Media.Geometry DefiningGeometry
{
    get
    {
        StreamGeometry geometry = new StreamGeometry();
        using (StreamGeometryContext context = geometry.Open())
        {
            context.BeginFigure(Points[0], false, true);
            foreach (Point pt in Points)
            {
                context.LineTo(pt, true, true);
            }
            geometry.Freeze();
            return geometry;
        }
    }
}

我转而使用PathGeometry& LineSegments现在工作正常。