ウィンドウを使用して、1 つ (またはオプションで 2 つ) の画像をグリッド行に表示したいと考えています。この画像は非常に大きくなる可能性があるため、Stretch プロパティを "UniformToFill" に設定し、グリッドをスクロール ビューアーに埋め込みます。
私の画像はアプリです。800 x 400 px で、ウィンドウにロードしようとすると、完全な幅で表示されません (水平スクロールバーが画像の最後で停止します)。
使用可能なウィンドウ領域を画像で埋めたいのですが、スクロールして完全に表示できるようにしたいと考えています。なにが問題ですか?
ご協力いただきありがとうございます!
タビナ
これは私のコードです:
.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;
}
}
}
}