0

的 SourceImage绑定到指向图像的 URL。

如果 URL 上的图像小于MaxHeightand MaxWidth,则以下代码效果很好。图像大小与 url 完全相同,并且窗口大小正确。

如果 URL 上的图像大于MaxHeightMaxWidth,则仅显示图像的一部分。图像不会缩小以适合窗口。

如果我删除Stretch="None",然后大图片会缩小以适合MaxHeightand MaxWidth,看起来很棒,但小图片会扩大以消耗所有可用空间,看起来像废话。

这是我一直在测试的两张图片:

http://imgur.com/iaBp2Fv,fiRrTJS#0

<Window x:Class="MyNamespace.Windows.PictureWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Profile Picture" ResizeMode="NoResize" UseLayoutRounding="True" SizeToContent="WidthAndHeight" MaxHeight="750" MaxWidth="750">

    <Image Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" Source="{Binding}" />

</Window>
4

2 回答 2

1

正如您所说,您可以做的是删除 Stretch="None",以使大图像缩小。但是,为了避免小图像被放大,你只需添加这个属性:

StretchDirection="DownOnly"

这可以防止小图像被放大,并允许大图像被缩小。窗口也会适当调整大小。

这是我在 LinqPad 中测试过的代码。只需将 showLarge 更改为 true 和 false 即可在图像之间切换。

bool showLarge = false;
var w = new Window();

w.ResizeMode = ResizeMode.NoResize;
w.UseLayoutRounding = true;
w.SizeToContent = SizeToContent.WidthAndHeight;
w.MaxHeight = 750;
w.MaxWidth = 750;

Image img = new Image();
img.HorizontalAlignment = HorizontalAlignment.Center;
img.VerticalAlignment = VerticalAlignment.Center;
img.StretchDirection = StretchDirection.DownOnly;
if(showLarge)
    img.Source = new BitmapImage(new System.Uri(@"http://i.imgur.com/iaBp2Fv.jpg"));
else
    img.Source = new BitmapImage(new System.Uri(@"http://i.imgur.com/fiRrTJS.jpg"));

w.Content = img;
w.ShowDialog();
于 2013-11-07T09:50:07.460 回答
0

在后面的代码中,创建一个属性为

public Point ImageSize {get;set}

从构造函数/Initialize() 中的 URL 获取图像并进行ImageSize相应设置

将窗口的高度和宽度绑定到ImageSize.XImageSize.Y

Height="{Binding ImageSize.Y}" Width="{Binding ImageSize.Y}"
于 2013-11-07T02:12:27.077 回答