1

我想在我正在制作的基于图块的游戏中将图像放在某个图块的顶部。问题是,当我生成随机地图时,当绘制 Canvas 的 Rectangle 子项时,它会在 Image 上绘制。我通过将图像作为窗口外部网格的一部分解决了这个问题。问题是当我想将图像放置在画布内的某个矩形上时,坐标关闭,因为网格大于画布。如何将图像边距限制为仅画布的边距(画布边界作为限制)而不是网格边界作为限制?

例如,为图像赋予 Margin.Left = 50 的值会将其放置在画布中的最佳位置,但由于其比例较大,它将被放置在网格中的不同位置。

// Image displays, but does not display when I add child Rectangles to the Canvas
<Canvas Height="700" HorizontalAlignment="Left" Name="canvas1" VerticalAlignment="Top" Width="700">
        <Image Name="heroImage" Stretch="Fill" Source="hero.png" Height="74" Canvas.Left="558" Canvas.Top="602" />
</Canvas>



<Grid>
    <Canvas Height="700" HorizontalAlignment="Left" Name="canvas1" VerticalAlignment="Top" Width="700">
        // Removed the Image
    </Canvas>

    // Placed the Image outside the Canvas, but now it will draw according to the Grid's Margin limits and not the Canvas Margin limits
    <Image Name="heroImage" Stretch="Fill" Source="hero.png" Height="74" Canvas.Left="558" Canvas.Top="602" />
</Grid>

画布内的图像位置 画布内的图像,完美定位

网格中画布外的图像位置 网格中的图像,由于我使用 Canvas Margin 坐标而放置错误

4

2 回答 2

1

我认为您可以在 Canvas 内使用您的图像,如果您希望图像在 Rectangle 上,则需要将图像的(Palen.ZIndex 或 Canvas.ZIndex)属性设置为大于 Rectangles 之一。例如:

<Canvas Height="700" HorizontalAlignment="Left" Name="canvas1" VerticalAlignment="Top" Width="700">
        <Image Name="heroImage" Stretch="Fill" Source="hero.png" Height="74" Canvas.Left="558" Canvas.Top="602" Canvas.ZIndex="1000" />
        <Rectangle x:Name="Some Rectangle" Canvas.ZIndex="1"/>
</Canvas>

图像将显示在矩形上。我认为这是解决方案。将图像放在画布上,因为要设置您想要的确切位置将非常复杂。

于 2013-03-04T19:25:58.780 回答
1

你做的第一种方式很好,你的形象应该是你的 Canvas 的孩子来做 Canvas.Left...

为了解决您的问题,您可以使用 ZIndex 将您的图像放在所有其他矩形的顶部吗?

Canvas.ZIndex="3 or whatever"

值为 2 的图像被绘制在值为 1 的矩形上。所以你可以输入一个高数字......

于 2013-03-04T19:20:28.133 回答