我试图从Silverlight MainWindow.xaml文件沿Shapes.Path对象获取点.我使用Expression Blend创建路径.
除非我尝试在表达式混合中移动路径(仅移动边距),否则以下代码可以正常工作.显然,这并没有计算在内,我从最初创建路径的地方得到了点.
var pathGeometry = path.Data.GetFlattenedPathGeometry();
var currentPoint = new System.Windows.Point();
var tangentPoint = new System.Windows.Point();
var rList = new List<Point>();
var pointsCount = 10;
for (int i = 0; i < pointsCount; i++)
{
double fraction = (double)i / (double)(pointsCount - 1);
pathGeometry.GetPointAtFractionLength(fraction, out currentPoint, out tangentPoint);
rList.Add(currentPoint);
}
return rList;
关于如何计算保证金变化的任何建议?
解决方法:
啊…我想我明白了. PathGeometry不会从UIElement继承,这意味着它没有任何边距感. Geometry托管在一个控件中,该控件实际上将Geometry绘制到屏幕上.如果要将几何体上的点转换为屏幕坐标,则需要找到宿主控件的位置并计算偏移量.
我的猜测是您的PathGeometry托管在Path控件中. (令人困惑,不是吗?)在屏幕坐标中获取位置相对容易.您可以在Path上调用PointToScreen方法,并将其输入给计算出的点(也许添加您可能要应用的任何填充).获取相对于窗口的点更为复杂.您可以在窗口上调用PointToScreen(针对点0,0),然后从窗口中减去Path的点.或者,您可以将Path放在Canvas中(其中Canvas直接位于窗口内),然后简单地获取Canvas.Top和Canvas.Left.
您没有说您的最终目标是什么,因此很难为您推荐一个特定的解决方案.