2010-05-17 74 views
0

我正在制作一个WPF应用程序,它将允许用户绘制和调整形状。 调整大小的部分完成使用装饰者,形状是我自己的类从Shape派生。 比如我有一个Polyline,并为每一个它的点,我装饰上有一个处理一个ThumbDragDelta事件: WPF中奇怪的形状调整大小行为

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; 
    } 

好了,问题是,有时(经常),拖动拇指不流畅在所有。首先,我认为这是一个性能问题,因为每次都会创建一个新的Point(但其他的东西),但是后来我注意到有时候这个点被设置在与鼠标位置无关的奇怪坐标处。

我也上传了一个示例项目HERE,有人谁知道他的方式wpf看看,并启发我发生了什么?

此外,如果有人认为这样做的更好方法,任何反馈将高度赞赏。

谢谢。

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

+0

Ur链接不要混乱。尝试上传到SkyDrive或一些普遍接受和可靠的上传主机。 – Will 2010-05-17 17:09:54

+0

感谢您的评论,这很奇怪,它不起作用。现在已上传到SkyDrive。 – Teodor 2010-05-17 17:39:58

回答

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,现在工作得很好。