我正在尝试从Silverlight MainWindow.xaml文件中获取沿Shapes.Path对象的点。我使用表达式Blend来创建路径。
下面的代码运行良好,除非我尝试在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;关于如何让保证金变化也计算在内有什么建议吗?
发布于 2012-07-04 01:40:07
啊..。我想我看到了问题所在。PathGeometry不是从UIElement继承的,这意味着它没有任何边距。Geometry驻留在执行此操作的控件中,而正是该控件实际将Geometry绘制到屏幕上。如果要将Geometry上的一个点转换为屏幕坐标,则需要找到宿主控件的位置并计算偏移量。
我的猜测是您的PathGeometry驻留在Path控件中。(令人困惑,不是吗?)在屏幕坐标中获取位置相对容易。您可以调用Path上的PointToScreen方法,并将计算出的点提供给它(可能会添加您可能应用的任何填充)。获取相对于窗口的点要复杂得多。您可以在窗口上调用PointToScreen (对于点0,0),然后从窗口的点中减去路径的点。或者,您可以将路径放在画布内(画布直接位于窗口内),然后简单地获得Canvas.Top和Canvas.Left。
你没有说你的最终目标是什么,所以很难为你推荐一个特定的解决方案。
https://stackoverflow.com/questions/11315765
复制相似问题