XAML网格的问题

dz6r00yl  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(101)

我正在努力学习c#,所以我决定跟随youtube上的教程,教你如何使用xaml和c#创建snake游戏。this is the video, I stopped at 46 min一切正常,直到完成网格设置后,我们运行代码。而结果是这样的

我的是这样的

。我很确定我没有错过任何东西,但可能任何真正了解xaml和c#的人都会注意到这一点,xaml和c#代码都是如此:

<Window x:Class="SnakeGame2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SnakeGame2"
        mc:Ignorable="d"
        Title="Snake" Height="500" Width="800"
        Background="{StaticResource BackgroundColor}"
        Foreground="{StaticResource TextColor}"
        FontFamily="{StaticResource MainFont}"
        WindowStartupLocation="CenterScreen"
        Icon="Assets/icon.ico">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBlock x:Name="Scoretext"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                   Text="Score: 0"
                   FontSize="22"
                   Margin="10"/>
        <Border x:Name="GridBorder"
                Grid.Row="1"
                BorderBrush="{StaticResource GridLinecolor}"
                BorderThickness="1.5"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                RenderOptions.EdgeMode="Aliased">
            <UniformGrid x:Name="GameGrid"
                         Width="400"
                         Height="400"
                         Background="{StaticResource GridBackgroundColor }"
                         SnapsToDevicePixels="True"
                         RenderOptions.BitmapScalingMode="HighQuality">
            </UniformGrid>
        </Border>
    </Grid>
</Window>

个字符
谢谢你的时间

wmvff8tz

wmvff8tz1#

您已经将行数减少到10,在视频中是15,但您没有更改网格的高度,仍然是400 px。

  • 将行数改回15,它应该看起来像下面的例子:
private readonly int rows = 15, cols = 15;

字符串
通常情况下,这只会为每个单元格生成一个矩形,其高度为40 px(40/10),宽度为~ 27 px(40/15),但在您的示例中,您正在使用图像来渲染单元格背景,并且默认情况下,该图像将保持其纵横比以适应单元格。如果有帮助,在此图像中,绿色是单元格,但您可以在中间看到Empty.png图像:
x1c 0d1x的数据
您可以将图像设置为 * 拉伸 *,但这不会像视频中那样看起来相同的均匀方形单元格。当使用固定的图像进行渲染时,如果你要改变行数,我们通常会调整网格的高度,基本上我们只需要保持单元格图像的纵横比。
要解决此问题,请尝试将图像设置为拉伸:

Image image = new Image
{
    Source = Images.Empty,
    Stretch = Stretch.Fill
};


或者将高度更改为267 px:

<UniformGrid x:Name="GameGrid"
             Width="400"
             Height="267"
             Background="{StaticResource GridBackgroundColor }"
             SnapsToDevicePixels="True"
             RenderOptions.BitmapScalingMode="HighQuality">
</UniformGrid>

相关问题