3

我正在尝试从 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;

关于如何让保证金变化也计算在内的任何建议?

4

1 回答 1

3

啊...我想我看到了问题所在。PathGeometry不继承自 UIElement,这意味着它没有任何 Margins 意义。几何图形托管在一个控件中,并且正是该控件实际将几何图形绘制到屏幕上。如果要将几何图形上的一个点转换为屏幕坐标,则需要找到主机控件的位置并计算偏移量。

我的猜测是您的 PathGeometry 托管在Path控件中。(令人困惑,不是吗?)在屏幕坐标中获取位置相对容易。您可以在 Path 上调用PointToScreen方法并将计算的点提供给它(也许添加您可能应用的任何填充)。获得相对于窗口的点更复杂。您可以在窗口上调用 PointToScreen(用于点 0,0),然后从窗口中减去路径的点。或者,您可以将路径放在画布内(画布直接位于窗口内),然后简单地获取 Canvas.Top 和 Canvas.Left。

你没有说你的最终目标是什么,所以很难为你推荐一个特定的解决方案。

于 2012-07-03T17:40:06.783 回答