如何在Silverlight网格上定位椭圆?

时间:2009-04-21 20:05:21

标签: c# .net-3.5 silverlight-2.0

我正在创建一个silverlight应用程序,它允许您在屏幕上的两个位置单击并绘制一个椭圆,其长轴在点击位置开始和结束。可点击区域是Silverlight网格控件。目前:

首次点击时,我是:

  1. 在点击时删除标记 点。
  2. 创建一个椭圆并为其设置父级 到网格。
  3. 创建和设置 AngleTransform在椭圆上。
  4. 当你移动鼠标时,我是:

    1. 计算距离 第一次点击。
    2. 将椭圆的宽度设置为 这个长度。
    3. 计算线的角度 点击点和网格 X轴。
    4. 将椭圆的AngleTransform角度设置为此角度。
    5. 到目前为止,这么好。显示椭圆,其长度和旋转角度在移动时跟随鼠标。

      但是,椭圆的长轴偏离点击点。 如何定位椭圆,使其长轴从点击点开始,到当前鼠标位置结束?

3 个答案:

答案 0 :(得分:2)

答案结果是:

  • 请勿使用System.Windows.Shapes.Ellipse。而是使用System.Windows.Shapes.Path并在其中嵌入EllipseGeometry

  • 同时将Path.RenderTransform设为RotateTransform

  • 请勿在{{1​​}}上设置WidthHeightStretch。而是设置Path的{​​{1}},CenterRadiusX

  • 最后,将RadiusY设置为EllipseGeometry长轴和X轴(长轴斜率的RotateTransform.Angle)的交点。同时将EllipseArcTan设置为RotateTransform.CenterX CenterY

答案 1 :(得分:0)

如果我不得不猜测(代码会有帮助),我认为你可以从开始点击点到网格左侧的差异添加填充,这应该有助于将其移动偏移。

答案 2 :(得分:0)

对于您的应用程序而言,使用Canvas而不是网格可能是个好主意,而不是直接设置coordianates形状。