图像拉伸和居中?

Gui*_*shy 6 wpf xaml stretch

我有以下XAML代码:

<Image Source="a.jpg" HorizontalAlignment="Center"  VerticalAlignment="Center" Stretch="Uniform"/>
Run Code Online (Sandbox Code Playgroud)

我在视觉上得到了这个:

在此输入图像描述

(http://img810.imageshack.us/img810/2401/imagestretchuniform.png)

有了Stretch="None",我得到了这个:

在此输入图像描述

(http://img28.imageshack.us/img28/1783/imagestretchnone.png)

现在,我想要的是垂直或水平居中图像Stretch="Uniform"!只有"最小"侧(带Uniform)将居中,右侧.但此刻,你可以在截图看,该图像是简单地把在左上角,即使我定义HorizontalAlignmentVerticalAlignment"Center"

我该怎么办 ?

整个代码是:

<UserControl [...]>
    <Canvas Width="640" Height="480" Background="#FF881607">
        <Image Source="a.jpg" HorizontalAlignment="Center"  VerticalAlignment="Center" Stretch="Uniform"/>
    </Canvas>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

编辑(解决方案):以防some1有同样的问题,这是我如何解决它:

<Canvas Width="640" Height="480" Background="#FFAA00FF" >
    <Image Source="z.jpg" Height="480"  Width="640"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)

这与HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform" 图像拉伸到均匀(无论图像是否小于或大于画布)的行为完全相同,并且它在垂直和水平方向都居中!

Cle*_*ens 7

如果将其放入网格中,它将自动居中.

<Grid>
    <Image Source="a.jpg"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

完全控制一些更多的网格:

<UserControl>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Image Source="a.jpg" Stretch="Uniform"/>
        </Grid>
        <Grid Grid.Row="1" Margin="10">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Button Grid.Column="0" Content="Start"/>
            <Button Grid.Column="2" Content="Stop"/>
        </Grid>
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

  • 但这只是为了获得正确的布局而必须做的事情.Canvas用于子元素的绝对定位.它通常需要一些代码来保持布局是最新的,它不会像Grid那样自动调整其子节点的大小. (2认同)

Bot*_*000 6

Canvas不支持图像的Horizo​​ntalAlignment.如果你想要像这样的动态布局,Canvas是一个糟糕的选择(如果你想要实际忽略这样的布局,它会很有用).你使用Canvas的确切原因是什么?
只需使用网格:

<Grid Background="#FF881607">
    <Image Source="a.jpg" HorizontalAlignment="Center"  VerticalAlignment="Center" Stretch="Uniform"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)