1

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

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

我希望图像填充可用的窗口区域,但能够滚动以完全查看它。怎么了?

谢谢你的帮助!

塔比纳

这是我的代码:

.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;
    }
  }
}

}

4

1 回答 1

0

您不能同时使用 ScrollViewer 和 Stretch="UniformToFill"。使用 Grid 和 Stretch="UniformToFill" 或 ScrollViewer 和 Grid。

于 2012-06-19T00:13:28.653 回答