如何保持原始宽高比的图像,而不是溢出父控件?

时间:2016-12-05 20:05:43

标签: c# wpf image stretch

我有一个WPF应用程序,主要的布局是基于网格的。在Column中,我在stackpanel中有一个Image,但是源太大(垂直)。问题是,它被切割在父元素结束的底部。如果我调整窗口的大小,图像最终显示自己并保持在中心,这很好。但是,调整到右侧时,图像会调整大小,并使其父级下溢。我正在寻找一种方法:

  • 当细胞太小时,它将伸展以完全适合原始长宽比
  • 当向右调整窗口大小时,图像将不会调整大小,除非它适合所有人。

这可能吗,不知何故?

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <StackPanel>
        <Label Margin="10,20,10,0" Content="Name:" />
        <TextBox Margin="10,0" Name="nameTextBox" TabIndex="0" FontSize="16" />
        <Label Margin="10,20,10,0" Content="Pass:" />
        <TextBox Margin="10,0" Name="passTextBox" TabIndex="1" FontSize="16" />
        <Image Name="logoImage" Margin="10" Source="pics/icon.png"/>
    </StackPanel>
</Grid>

1 个答案:

答案 0 :(得分:1)

你想要这样的东西吗?

<DockPanel>
  <StackPanel DockPanel.Dock="Top">
      <Label Margin="10,20,10,0" Content="Name:" />
      <TextBox Margin="10,0" Name="nameTextBox" TabIndex="0" FontSize="16" />
      <Label Margin="10,20,10,0" Content="Pass:" />
      <TextBox Margin="10,0" Name="passTextBox" TabIndex="1" FontSize="16" />
   </StackPanel>
   <Viewbox Stretch="Uniform" DockPanel.Dock="Bottom">
       <Image Name="logoImage" Margin="10" Source="pics/text.png"/>
   </Viewbox>
</DockPanel>

enter image description here

您需要从StackPanel中删除该图像,因为StackPanel将始终垂直增长与内容的高度一样多,然后您可以使用ViewBox