【问题标题】:How do I position an ellipse on a Silverlight Grid?如何在 Silverlight 网格上定位椭圆?
【发布时间】:2009-04-21 20:05:21
【问题描述】:
我正在创建一个 silverlight 应用程序,它允许您在屏幕上的两个位置单击,并绘制一个椭圆,其长轴在单击位置开始和结束。可单击区域是 Silverlight Grid 控件。目前:
当你第一次点击时,我是:
- 在单击时放置标记
点。
- 创建一个椭圆并将其作为父级
到网格。
- 创建和设置
椭圆上的 AngleTransform。
当你移动鼠标时,我是:
- 计算距离
第一个点击点。
- 将椭圆的宽度设置为
这个长度。
- 计算直线的角度
点击点和网格的
X 轴。
- 将椭圆的 AngleTransform 角度设置为该角度。
到目前为止,一切都很好。椭圆会显示出来,它的长度和旋转角度会随着鼠标的移动而变化。
但是,椭圆的长轴偏离点击点。
如何定位 Ellipse,使其长轴从单击点开始并在当前鼠标位置结束?
【问题讨论】:
标签:
c#
.net-3.5
silverlight-2.0
【解决方案1】:
答案竟然是:
不要使用System.Windows.Shapes.Ellipse。而是使用System.Windows.Shapes.Path 并在其中嵌入EllipseGeometry。
还将Path.RenderTransform 设置为RotateTransform。
不要在Path 上设置Width 或Height 或Stretch。而是设置EllipseGeometry 的Center、RadiusX 和RadiusY。
最后,将RotateTransform.Angle设置为Ellipse长轴与X轴的交角(长轴斜率ArcTan)。还将RotateTransform.CenterX 和CenterY 设置为EllipseGeometry Center。
【解决方案2】:
如果我不得不猜测(代码会有所帮助),我认为您可以从开始点击点到网格左侧的差异添加填充,这应该有助于将其移动偏移量。
【解决方案3】:
在您的应用程序中使用 Canvas 而不是网格可能是个好主意,这样您就可以直接设置形状坐标。