c# - 沿 XAML Shapes.Path 获取点

标签 c# wpf silverlight xaml vector-graphics

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

关于如何计算 margin 变化有什么建议吗?

最佳答案

啊...我想我明白问题所在了。 PathGeometry没有继承自 UIElement,也就是说它没有任何 Margins 的意义。 Geometry 托管在执行此操作的控件中,实际上是该控件将 Geometry 绘制到屏幕上。如果要将 Geometry 上的点转换为屏幕坐标,则需要找到主机控件的位置并计算偏移量。

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

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

关于c# - 沿 XAML Shapes.Path 获取点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11315765/

相关文章:

c# - SharePoint 列表项的 AddAsync 上无法识别字段

c# - WCF 作为应用程序工作,而不是作为服务

c# - Windows 窗体 ListView 缺少水平滚动条

WPF,带有MVVM(Caliburn.Micro)的可绑定(bind)richTextBox-文档已经属于另一个RichTextBox

c# - Caliburn Micro,来自单个 View 模型的多个 View

.net - WCF 自定义 BehaviorExtension 错误 : An extension "silverlightFaults" already appears in extension collection. 扩展名必须是唯一的

Silverlight 项目 - 滑入和滑出面板 - 如何?

wpf - Silverlight 3 是否可以访问本地文件系统、Open Excel 和打印报告?

c# - 抽象 Windows.Forms.Panel 可能在 C# 中?

wpf - MahApps 风格不应适用于所有项目