Имеется 10 изображений в окне без рамки WPF формы. Как мне их разместить так, чтобы можно было из другой формы растягивать сразу все изображения сохраняя их пропорции? Во второй форме два слайдера, которыми растягиваем первую форму и что бы изображения так же растягивались?
Можно сделать так:
1) Для отображения списка картинок воспользуемся элементом ListBox.
2) Что бы область просмотра каждой картинки была одинаковой у элемента ListBox переопределяем ItemsPanel и в качестве панели устанавливаем UniformGrid.
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
3) Далее определяем шаблон для отображения каждого элемента списка. Так как нам нужно отображать картинки используем элемент Image. Кроме того, что бы они растягивались пропорционально создаем стиль для них в ресурсах окна.
<Window.Resources>
<!-- Что бы картинки растягивались пропорционально -->
<Style x:Key="ImageStyle"
TargetType="Image">
<Setter Property="Stretch" Value="Uniform" />
</Style>
</Window.Resources>
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<Image Source="{Binding Path}"
Style="{StaticResource ImageStyle}" />
</Border>
</DataTemplate>
</ListBox>
4) Что бы картинки занимали всю выделенную для них область устанавливаем свойства ListBox.HorizontalContentAlignment и ListBox.VerticalContentAlignment в значение Stretch, а так же отключаем вертикальный и горизонтальный ScrollBar.
<ListBox HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
ItemsSource="{Binding Images}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
</ListBox>
5) Собираем то что сделали вместе.
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<!-- Что бы картинки растягивались пропорционально -->
<Style x:Key="ImageStyle"
TargetType="Image">
<Setter Property="Stretch" Value="Uniform" />
</Style>
</Window.Resources>
<Grid>
<ListBox HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
ItemsSource="{Binding Images}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<Image Source="{Binding Path}"
Style="{StaticResource ImageStyle}" />
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
</Window>
Далее во ViewModel заполняем нашу коллекцию картинок данными.
public class MainViewModel : ViewModelBase
{
public ObservableCollection<MyImg> Images { get; }
public MainViewModel()
{
Images = new ObservableCollection<MyImg>();
// Заполняем данными коллекцию...
}
}
// Класс, который представляет нашу картинку.
public class MyImg
{
public string Path { get; set; }
}
Продвижение своими сайтами как стратегия роста и независимости