Я изменяю расположение моей сетки с 3X3 на 2X5.Когда я переключаюсь с 3X3 на 2X5, изображения растягиваются до ширины равномерной сетки, но высота уменьшается вдвое по сравнению с общими вложениями.
Xaml:
<Window x:Class="ImageList1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ImageDisplay" Height="350" Width="825"
xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
>
<Grid x:Name="rootGrid">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<StackPanel>
<StackPanel Orientation="Vertical">
<Label Content="Select the display format:" Margin="0,0,0,10"/>
<ComboBox x:Name="cmbSelect" Width="100" Margin="-400,-30,0,10" Height="20" SelectionChanged="CmbSelect_SelectionChanged" >
<ComboBoxItem>2X2</ComboBoxItem>
<ComboBoxItem>3X3</ComboBoxItem>
</ComboBox>
</StackPanel>
<ListBox Name="UniformGrid" ItemsSource="{Binding ImageList1}" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding Path=GridRow, Mode=TwoWay}" Columns="{Binding Path=GridColumn, Mode=TwoWay}" Width="800" Height="500"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Margin="0.5">
<Image Source="{Binding Path}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stretch="UniformToFill"/>
<TextBlock Background="Black" Foreground="White" Height="18" TextAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,4">
<TextBlock Name="ImageName" Margin="0,0,0,1" Foreground="Red" FontWeight="Bold" Text="{Binding FileName}"/>
<TextBlock Name="ImageType" Margin="0,0,0,2" Foreground="LightGoldenrodYellow" FontSize="11">
<TextBlock.Text>
<MultiBinding StringFormat="Type: {0}">
<Binding Path="Extension" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Name="ImageSize" Margin="0,0,0,3" Foreground="Violet">
<TextBlock.Text>
<MultiBinding StringFormat="Size: {0} Bytes">
<Binding Path="Size"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</TextBlock>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
</StackPanel>
</ScrollViewer>
</Grid>
</Window>
Код позади:
namespace ImageList1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private bool handle = true;
int index = 1;
public MainWindow()
{
InitializeComponent();
Window_Loaded();
}
public void Window_Loaded()
{
// string folderName = "Wallpapers";
//string folderpath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var files = Directory.GetFiles(@"D:\ImageList1\ImageList1\Wallpapers");
ObservableCollection<ImageDetails> images = new ObservableCollection<ImageDetails>();
foreach (var file in files)
{
ImageDetails id = new ImageDetails()
{
Path = file,
FileName = System.IO.Path.GetFileName(file),
Extension = System.IO.Path.GetExtension(file)
};
BitmapImage img = new BitmapImage();
img.BeginInit();
img.CacheOption = BitmapCacheOption.OnLoad;
img.UriSource = new Uri(file, UriKind.Absolute);
img.EndInit();
id.Width = img.PixelWidth;
id.Height = img.PixelHeight;
FileInfo fi = new FileInfo(file);
id.Size = fi.Length;
images.Add(id);
}
UniformGrid.ItemsSource = images;
UniformGrid.SelectedItem = UniformGrid.Items[index];
UniformGrid.ScrollIntoView(UniformGrid.Items[index]);
}
private void CmbSelect_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cmb = sender as ComboBox;
handle = !cmb.IsDropDownOpen;
Handle();
}
private void Handle()
{
switch (cmbSelect.SelectedItem.ToString().Split(new string[] { ": " }, StringSplitOptions.None).Last())
{
case "2X2":
dynamic_Layout _layout = new dynamic_Layout(2, 5);
this.rootGrid.DataContext = _layout;
break;
case "3X3":
dynamic_Layout _layout1 = new dynamic_Layout(3, 3);
this.rootGrid.DataContext = _layout1;
break;
}
}
}
}
dynamic_Layout Класс:
namespace ImageList1
{
public class dynamic_Layout : INotifyPropertyChanged
{
int _gridRow;
int _gridColumn;
public event PropertyChangedEventHandler PropertyChanged;
public int GridRow
{
get
{
return _gridRow;
}
set
{
_gridRow = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("GridRow"));
}
}
}
public int GridColumn
{
get
{
return _gridColumn;
}
set
{
_gridColumn = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("GridColumn"));
}
}
}
public dynamic_Layout(int columns, int rows)
{
this.GridColumn = columns;
this.GridRow = rows;
}
}
}
Ожидаемый результат: макет изменяется с 3X3 на 2X5, как и ожидалось, но изображения не отображаются должным образом.
Фактический результат: Изображениеприлагается.