Silverlight 图像拉伸(stretch) ="Uniform"纵向尺寸图像失败

标签 silverlight image stretch

我正在使用 Silverlight 3.0 Image 控件,将其 Stretch 属性设置为“Uniform”。除非我弄错了,否则 Stretch="Uniform"的预期行为是它应该缩放图像,保持纵横比,并根据需要进行信箱处理。这对于横向图像非常有效,因为它们会放大以填充空间,保持宽高比而不切断任何图像。对于具有更垂直或“纵向”方向的图像来说,这是完全失败的。它们实际上不是缩放以适应图像控件,而是缩放到超过高度限制,这样您只能看到图像的中间,顶部和底部被切除。好像控件在缩放时只使用宽度,而忘记检查高度?

这是图像控件中的错误,还是我丢失或错误设置了属性?要重现,请查找/创建一个具有“肖像”纵横比(高大于宽)的图像,并创建一个带有 Stretch="Uniform"的图像。

**** 使用请求的 XAML 进行更新 ****** 请注意,尺寸不明确的原因是为了允许全屏和缩放。

 <Grid x:Name="LayoutRoot">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="9"/>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="50"/>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="9"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="30" />
    </Grid.RowDefinitions>

<Border BorderBrush="Black" Grid.Row="0" Grid.ColumnSpan="8" BorderThickness="1, 1, 1, 0">
   <Border BorderBrush="{StaticResource blackStatusMapLGB}" BorderThickness="9,9,9, 0">
      <Border BorderBrush="Gray" BorderThickness="1, 1, 1, 0">
         <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
               <MediaElement Height="Auto" Width="Auto" Visibility="Collapsed" AutoPlay="true" Stretch="Fill" MediaFailed="SilverlightMediaPlayer_MediaFailed" Name="previewMediaElement"/>
                        <Image Name="imagePreview" Stretch="Uniform"/>
          </StackPanel>
      </Border>
   </Border>
</Border>

最佳答案

因此,垂直 StackPanel 的工作方式是在垂直轴上用无限的 Size 来测量其子级,有效地告诉子级:“你可以想多高就多高”。它不限制子级的垂直尺寸(尽管它在水平方向限制它)。

Stretch=Uniform 属性在没有明确设置尺寸的图像上工作的方式是:“在尺寸限制内尽可能大,同时保持纵横比”。

现在,当您将这两者结合起来时,您将得到一个仅在水平轴上受到约束的图像;它占用了所有可用的水平空间和垂直尺寸以保持纵横比。

这个解释是否可以帮助您理解为什么您会看到您所看到的行为?

假设您有一张宽高比为 2:1 的图像(高是宽的两倍)。它具有 Stretch=Uniform 并且没有明确设置宽度/高度。您将其放入大小为 100x100 的 StackPanel 中。图像的大小限制为 100xInfinity。它首先会在水平轴上调整大小并占用所有可用空间; 100 像素。然后它会看到它的长宽比为 2:1,因此垂直尺寸将达到 200 像素。因此,您最终会在 100x100 的 StackPanel 中得到尺寸为 100x200 的图像。因此 StackPanel 被迫将其子级剪辑到可用空间。

关于Silverlight 图像拉伸(stretch) ="Uniform"纵向尺寸图像失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1412364/

相关文章:

android - 关于 S3 和 S2 中 Android 图像大小的问题?

html - 页面上的图像未对齐

cordova - Android的Phonegap启动画面: not stretched or 9patch

html - 使用隐式宽度和无空格换行防止元素拉伸(stretch)

wpf - 可滚动文本 block 大小恰好为 2 行高

silverlight - 如何在渲染前获取 StackPanel 高度?

html - 在 HTML、CSS 中不显示作为元素符号的图像

wpf - 图像拉伸(stretch)和居中?

.net - 更改 ValidationSummary 中的字段名

c# - 如何避免在替换所有元素或添加元素集合时多次触发 ObservableCollection.CollectionChanged