沿XAML Shapes.Path获取点

我试图从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.

您没有说您的最终目标是什么,因此很难为您推荐一个特定的解决方案.

上一篇:c#-关闭并清理ViewModel中的视图


下一篇:c#-Metro风格的应用程序是否支持本地数据库