如何使用DefiningGeometry属性?

时间:2014-04-17 16:21:32

标签: c# .net wpf windows-phone-8

我正在将WPF解决方案移植到WindowsPhone。

我从System.Windows.Shapes exist on Windows Phone 8了解此属性。

我的问题是我添加了using System.Windows.Shapes;,但我仍然无法访问它。如果我打开System.Windows.Shapes,我就无法看到它。

我认为我没有正确的程序集(PresentationFramework(在PresentationFramework.dll中))。

我不是the first one to ask。如果我真的能做到。我可以做同等的吗?

刚刚在SO中找到kind of duplicate question。答案并没有解决问题,但它可以是一个开始。

我怎样才能做到这一点?

(我在PresentationCore遇到了同样的问题,但我设法躲闪了。)

1 个答案:

答案 0 :(得分:1)

DefiningGeometry是受保护的属性,这就是您无法访问它的原因。

渲染形状后,您可以使用RenderedGeometry,但我不知道您是否可以信任该属性。

另一种选择是检查你拥有的几何类型,投射它并手动转换它。

修改

使用RenderedGeometry:

Geometry GetGeometry(Shape shape)
{
    return shape.RenderedGeometry;
}

手动投射:

Geometry GetGeometry(Shape shape)
{
    Rectangle rectangle = shape as Rectangle;
    if (rectangle != null)
    {
       return new RectangleGeometry(new Rect(0, 0, 1, 1), rectangle.RadiusX, rectangle.RadiusY, rectangle.GeometryTransform);
    }

    Ellipse ellipse = shape as Ellipse;
    if (ellipse != null)
    {
       //...
    }

    // ...
}

正如我在MSDN中看到的,除了下面写的Rectangle的示例代码之外,你还必须编写类似的代码:Rectangle,Ellipse,Line,Path,Polygon和Polyline。

http://msdn.microsoft.com/en-us/library/system.windows.shapes.shape.aspx#inheritanceContinued