C# 在silverlight 3中使用平面投影时转换坐标系

C# 在silverlight 3中使用平面投影时转换坐标系,c#,xaml,silverlight-3.0,C#,Xaml,Silverlight 3.0,我有一个400 x 400的正方形,上面有一个平面投影 <Rectangle x:Name="Ground" Width="400" Height="400" Stroke="Black" VerticalAlignment="Bottom" Canvas.Left="60" Canvas.Top="50" > <Rectangle.Fill> <ImageBrush ImageSource=

我有一个400 x 400的正方形,上面有一个平面投影

<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>


如何确定变换正方形的边界,以便放置在其上的对象不会超出边界?

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


这将有助于您实现所尝试的操作。

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


这将有助于您实现您的目标。

谢谢您的回复。在发帖之前,我尝试过这个方法,但没有效果,但我可能还是做错了。GeneralTransform transform=control.TransformToVisual(地面);点坐标=transform.transform(新点(Ground.Margin.Left+Ground.Width,Ground.Margin.Top+Ground.Height));理论上,这应该给我一个点,在变换矩形的右下角,但它不是。我想知道是否需要将矩形转换为包含矩形的画布。我会试试看。如果你想得到“Ground”相对于某个面板的右下角(比如“LayoutRoot”),你可以这样做:var transform=Ground.TransformToVisual(LayoutRoot);var point=transform.transform(新点(Ground.Width,Ground.Height));感谢您的回复。我在发布之前尝试过这个方法,但没有效果,但我可能还是做错了。GeneralTransform transform=control.transform-visual(地面);点坐标=transform.transform(新点(Ground.Margin.Left+Ground.Width,Ground.Margin.Top+Ground.Height));因此,理论上,这应该会给我一个位于变换矩形右下角的点,但事实并非如此。我想知道是否需要将矩形变换到包含矩形的画布上。我将尝试一下,看看。如果你想得到相对于某个面板的“地面”右下角(比如“LayoutRoot”),您将执行以下操作:var transform=Ground.TransformToVisual(LayoutRoot);var point=transform.transform(新点(Ground.Width、Ground.Height);