(Название отредактировано)
Как это сделать с помощью XAML? Горизонтальная ширина фиксирована и должна быть прокручиваемой.
Возможно, GridView или другой элемент управления, например ItemsControl или StackPanel.
(Название отредактировано)
Как это сделать с помощью XAML? Горизонтальная ширина фиксирована и должна быть прокручиваемой.
Возможно, GridView или другой элемент управления, например ItemsControl или StackPanel.
Вы используете ListView только тогда, когда вам нужно иметь элементы в вертикальном направлении, в противном случае GridView представляет все, что вам нужно. Он представляет элементы в горизонтальном направлении.
Большая часть функционирования обоих одинаковы.
Если я правильно понимаю ваше требование, у вас может быть сетка с двумя ячейками. В левой ячейке будет scrollviewer со стековой панелью, во второй ячейке будет scrollviewer с оберточной панелью с вертикальной ориентацией.
Если вам нужно выполнить привязку данных к какому-либо источнику элементов, используйте элементы управления элементами с пользовательским шаблоном ItemsPanelTemplate — stackpanel, wrappanel, однородная сетка, холст или любая другая панель, которая вам нужна.
РЕДАКТИРОВАТЬ: пример кода с использованием двух ячеек с ListView и IntemsControl, каждая в своем собственном средстве просмотра прокрутки:
<ScrollViewer HorizontalScrollBarVisibility="Disabled">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListView x:Name="StudentsListView" ItemsSource="{Binding Students}">
<ListView.ItemTemplate>
<DataTemplate>
<Border Background="#484" Height="90" Width="200">
<TextBlock Text="{Binding Name}" FontSize="24" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" ZoomMode="Disabled">
<ItemsControl ItemsSource="{Binding Students}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Markings}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="#888" Height="90" Width="90" Margin="5">
<TextBlock Text="{Binding }" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</ScrollViewer>
public class ViewModel
{
public ViewModel()
{
Students = Enumerable.Range(0, 25)
.Select(i => new Student
{
Name = "Student " + i,
Markings = Enumerable.Range(1, 30).Select(j => (j + i) % 5 + 1).ToList()
}).ToList();
}
public List<Student> Students { get; set; }
}
public class Student
{
public string Name { get; set; }
public List<int> Markings { get; set; }
}
и результат:
Вы можете сделать это, поместив всю строку в шаблон данных и используя столбцы сетки для установки ширины:
<ListView Width="500" Height="500" ItemsSource="{Binding Data}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Item}" Grid.Column="0"/>
<ListView ItemsSource="{Binding SubItems}" Grid.Column="1"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollMode="Enabled"
SelectionMode="None">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel
Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Простой рабочий пример: Связывание только вертикального смещения двух средств просмотра прокрутки
И я нашел расширенный пример в 5-м образце «Ввод и манипуляции XAML — расширенные концепции»: https://code.msdn.microsoft.com/windowsapps/XAML-input-and-manipulation-44125241