首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Silverlight / WPF中克隆PathGeometry

在Silverlight / WPF中克隆PathGeometry
EN

Stack Overflow用户
提问于 2012-09-15 20:12:18
回答 1查看 721关注 0票数 1

我有一个简单的处理程序,可以向一个空的Silverlight画布添加一个椭圆

代码语言:javascript
复制
    private void UCLoaded(object sender, RoutedEventArgs e)
    {
        var geometry = MakeElipse(20, 15, new Point(100, 100));
        var ellipsePath = new Path
        {
            Data = geometry,
            Fill = new SolidColorBrush(Colors.DarkGray),
            StrokeThickness = 4,
            Stroke = new SolidColorBrush(Colors.Gray)
        };
        LayoutRoot.Children.Add(ellipsePath);
        //
        var duplicateEllipsePath = new Path();
        //duplicateEllipsePath.Data = ellipsePath.Data; 
        duplicateEllipsePath.Data = geometry;
        duplicateEllipsePath.Fill = ellipsePath.Fill; 
        duplicateEllipsePath.StrokeThickness = ellipsePath.StrokeThickness;
        duplicateEllipsePath.Stroke = ellipsePath.Stroke;
        LayoutRoot.Children.Add(duplicateEllipsePath);
    }

第一个椭圆ellipsePath很好,并按预期呈现。但是行duplicateEllipsePath.Data = ellipsePath.Data或可选的duplicateEllipsePath.Data = geometry都抛出System.ArgumentException“值不在预期范围内”。它怎么会在一次范围内,然后立即超出范围呢?在这样的代码中复制路径的正确方式是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-15 23:57:29

看起来克隆路径的唯一方法是手动操作。引用this answer from Yi-Lun Luo

Data属性实际上是一个几何图形。虽然在Silverlight中不明显,但几何图形实际上依赖于底层系统资源(因为它需要绘制一些东西)。如果你需要绘制另一个几何图形,你将需要另一个系统资源。因此,在将其分配到新路径之前,必须对其进行克隆。在WPF中,我们在Geometry上有一个Clone方法,不幸的是Silverlight不支持这个方法。因此,您必须手动进行克隆。

易伦的另一篇帖子声称包含用于克隆几何体的反射代码,相同的代码似乎显示为here,尽管后者的格式更清晰。然而,在您的例子中,使用这样的方法似乎有点过分了。使用的几何体由MakeElipse sic方法创建。将生成几何图形的通用代码提取到一个方法中似乎是进行此操作的最佳方式。

错误消息“Value is not fall The expected range”有点误导人。我没有看到任何“超出范围”的东西,假设在你的第一个椭圆的范围内有完全相同的物体。我不能确切地说为什么会报告这个错误消息,但我可以推测。Silverlight是用本机代码实现的,我相信因为本机代码不能抛出异常,所以它会返回数字错误代码。也许错误代码的数量是有限的,“值不在预期范围内”的代码就是为这个错误选择的代码吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12437267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档