2009-08-31 47 views
1

我具有正方形400×400与连接到它Silverlight中使用平面投影当转换坐标系统3

<Rectangle x:Name="Ground" Width="400" Height="400" Stroke="Black" VerticalAlignment="Bottom" Canvas.Left="60" Canvas.Top="50" > 
       <Rectangle.Fill> 
        <ImageBrush ImageSource="_images/grass.jpg"/> 
       </Rectangle.Fill> 
       <Rectangle.Projection> 
        <PlaneProjection x:Name="GroundPlaneProjection" CenterOfRotationZ="0" GlobalOffsetX="0" GlobalOffsetY="0" GlobalOffsetZ="0" LocalOffsetX="0" LocalOffsetY="0" LocalOffsetZ="0" RotationX="120" RotationY="-40" RotationZ="25"/> 
       </Rectangle.Projection> 
      </Rectangle> 

一个平面上的投影如何将确定的边界的方变换以便对象置于其上会不会出界?

回答

1

通过在UIElement上使用TransformToVisual方法,可以在不同元素的坐标空间之间进行转换。这将为您提供一个变换对象,您可以将它用于将一个元素的坐标空间中的点转换为另一个元素的坐标空间。

这应该可以帮助你实现你正在尝试做的事情。

+0

感谢您的回复。在发布之前,我已经尝试过这种方法,但我可能做错了。 GeneralTransform transform = control.TransformToVisual(Ground); Point coordinates = transform.Transform(new Point(Ground.Margin.Left + Ground.Width,Ground.Margin.Top + Ground.Height));所以在理论上应该给我一个点在转换后的Rectangle的右下角,但它不会。我想知道是否需要将矩形转换为包含矩形的画布。我会试试看看。 – 2009-09-01 00:54:33

+0

如果你想得到相对于某个面板(比如“LayoutRoot”)的“Ground”的右下角,你应该这样做: var transform = Ground.TransformToVisual(LayoutRoot); var point = transform.Transform(new Point(Ground.Width,Ground.Height); – KeithMahoney 2009-09-01 17:18:08

相关问题