拉伸图像未完全显示

时间:2012-06-18 21:50:45

标签: wpf image scrollviewer stretch

我想使用一个窗口在网格行中显示一个(或可选的两个)图像。 这个图像可能很大,所以我将Stretch属性设置为“UniformToFill”并将网格嵌入到滚动查看器中。

我的图片是应用程序。 800 x 400像素,如果我尝试将其加载到我的窗口中,它不会以完整的宽度显示(水平滚动条在图像结束之前停止)。

我希望图像填充可用的窗口区域,但是能够滚动以完全看到它。有什么问题?

感谢您的帮助!

tabina

这是我的代码:

.xaml:

<Window x:Class="Wpf.Dialogs.ImageBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ImageBox" Topmost="True" WindowStartupLocation="CenterOwner"  Width="800" Height="600">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" CanContentScroll="True">
  <Grid x:Name="gridImages">
    <Grid.RowDefinitions>
      <RowDefinition Height="*" />
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Image Grid.Row="0" x:Name="img1" Stretch="UniformToFill"/>
    <Image Grid.Row="1" x:Name="img2" Stretch="UniformToFill"/>
  </Grid>
</ScrollViewer>
</Window>

背后的代码:

using System;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;

namespace Wpf.Dialogs
{

public partial class ImageBox : Window
{
  public ImageBox() : this("Image", string.Empty, 800, 600)
  {
  }

  public ImageBox(string title, string image, int width, int height)
    : this(title, new string[] { image }, width, height)
  {
  }

  public ImageBox(string title, string[] images, int width, int height)
  {
    InitializeComponent();

    this.Title = title;
    this.Image = images;
  }


  public string[] Image
  {
    set
    {
      if (value != null)
      {
        var bim = CreateBitmap(value[0]);
        this.img1.Source = bim;

        if (value.Length == 2)
        {
          var bi = CreateBitmap(value[1]);

          if (bi != null)
          {
            this.img2.Source = bi;
          }
        }
        else
        {
          this.img2.Source = null;
        }
      }
    }
  }

  private BitmapImage CreateBitmap(string file)
  {
    if (File.Exists(file))
    {
      var bmp = new BitmapImage();
      bmp.BeginInit();
      bmp.UriSource = new Uri(file);
      bmp.CacheOption = BitmapCacheOption.OnLoad;
      bmp.EndInit();

      return bmp;
    }
    else
    {
      return null;
    }
  }
}

}

1 个答案:

答案 0 :(得分:0)

你不能使用ScrollViewer,同时使用Stretch =“UniformToFill”。使用Grid和Stretch =“UniformToFill”或ScrollViewer和Grid。