2012-02-09 127 views
6

我有以下XAML代码:图像拉伸并居中?

<Image Source="a.jpg" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform"/> 

和我,在视觉上,得到这个:

enter image description here

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

随着Stretch="None",我得到这个:

enter image description here

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> 

EDIT(解决方案): 万一some1有同样的问题,这是我如何解决它:

<Canvas Width="640" Height="480" Background="#FFAA00FF" > 
    <Image Source="z.jpg" Height="480" Width="640"/> 
</Canvas> 

这是完全一样的行为为HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform" 图像拉伸至均匀(无论图像是比帆布小还是大),并且它的中心既垂直又水平!

+0

你能也张贴周围的XAML?也许图像的父母不是居中或拉伸。 – Botz3000 2012-02-09 11:04:26

+0

添加到问题! – 2012-02-09 11:07:58

回答

7

如果你把它放在一个网格中,它会自动居中。

<Grid> 
    <Image Source="a.jpg"/> 
</Grid> 

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

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

不工作,如果我只是放弃图像与网格,我不想在我的画布或我的整个UserControl周围使用网格...实际上,我不想使用网格。也许如果我只是放弃图像,但实际上并非如此 – 2012-02-09 11:14:50

+0

请参阅我编辑的答案,了解如何获得所需的布局。你根本不应该使用Canvas。 – Clemens 2012-02-09 11:18:38

+0

这通常是我不想使用的那种代码!我目前有一个干净的XAML代码,我不想创建行;列,模板和这些东西:/ – 2012-02-09 11:22:21

6

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

<Grid Background="#FF881607"> 
    <Image Source="a.jpg" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform"/> 
</Grid> 
+0

我用我找到的解决方案编辑了我的问题! – 2012-02-10 08:40:25