7

有没有办法用xaml中的图像填充可用的宽度/高度?我需要 UniformToFill 之类的东西,但我可以控制拉伸方向(宽度或高度)

假设我有以下代码:

<UniformGrid Columns="2" Rows="2">        
    <Image Source="Desert1.jpg" Stretch="Uniform"/> //
    <Image Source="Desert2.jpg" Stretch="UniformToFill"/> // 
    <Image Source="Desert3.jpg" />
    <Image Source="Desert4.jpg" />
</UniformGrid>

编辑: 例如(宽度):如果图像是我想要显示的宽度的一半,我不关心高度,只需缩放 x2 图像高度和宽度。所以图像必须适合宽度,而不关心高度。这是理想的行为,但如果不可能 - 好的。因此,如果可能的话,您可以重新考虑问题,我该如何在 xaml 中做到这一点。

此外,所有图像可能具有不同的宽度和高度

4

3 回答 3

4

我认为您可能能够在某些条件下获得您想要的效果。如果您的图像都大于它们将显示的尺寸,您可以使用这个:

<Image Source="Desert.jpg" Stretch="UniformToFill" StretchDirection="DownOnly" />

AViewBox具有与 an 相同的Stretch属性,并且在如何:将拉伸属性应用于MSDN 上的 Viewbox 文章的内容中Image,有一个很好的示例来说明不同组合之间的差异。

于 2013-08-15T10:58:15.493 回答
2

这可能是您正在寻找的...

TransformedBitmap

这是我在 ImageUtility 类中创建的静态方法。

public static TransformedBitmap GetScaledBitmapImageSprite(BitmapSource src, double x_scale, double y_scale)
{
  return (new TransformedBitmap(src, new ScaleTransform(x_scale, y_scale)));
{

x_scale 和 y_scale 是以下形式的双精度数:

期望宽度/原始宽度

也许与您正在寻找的内容有所不同,但我认为它可以让您走上正确的道路。

您可以将 TransformedBitmap 存储在内存中并通过以下方式应用新的转换:

TransformedBitmap x = new TransformedBitmap();
x.Transform = new ScaleTransform(x,y);
于 2013-08-15T10:52:48.807 回答
1

你应该使用

<Image Source="{Binding Image}" Stretch="Fill"/>

就像如果您使用 Stretch="UnifrmtoFill" 那么它将按比例改变长度和宽度,或者我同时说两者。

因此,如果您使用 Stretch="Fill",它使您有机会一次更改高度或宽度,无论发生什么变化。

于 2015-07-16T09:37:12.807 回答