Я использую C # .Net 4.7.2 и WPF 4.5.2
Я хочу создать представление с несколькими столбцами.Каждый столбец содержит количество строк.Точное число строк может отличаться от одного столбца к другому.
Вот пример: ![enter image description here](https://i.stack.imgur.com/ICvor.jpg)
Для достижения того, что видно на рисунке I 'мы пробовали этот xaml
<UserControl x:Class="MyNamespace.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="1080" d:DesignWidth="1920">
<ListBox ItemsSource="{Binding Groups}" HorizontalAlignment="Left" VerticalContentAlignment="Top" Padding="0">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Text="{Binding GroupHeader}" HorizontalAlignment="Stretch" />
<ListBox Grid.Row="2" ItemsSource="{Binding RowElements}"
HorizontalAlignment="Stretch"
BorderThickness="0"
Margin="0">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="Margin" Value="0" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding RowHeader}"
IsReadOnly="True"
TextAlignment="Left"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
VerticalAlignment="Stretch" VerticalContentAlignment="Center" />
<TextBox Grid.Column="1" Text="{Binding RowValue}"
TextAlignment="Left"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
VerticalAlignment="Stretch" VerticalContentAlignment="Center"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</UserControl>
вместе с этой моделью представления (упрощенно)
using System.Collections.ObjectModel;
using System.Windows.Controls;
namespace MyNamespace
{
public class Group
{
public string GroupHeader { get; set; }
public ObservableCollection<RowElement> RowElements { get; set; }
}
public class RowElement
{
public string RowHeader { get; set; }
public double RowValue { get; set; }
}
public partial class MyView : UserControl
{
public MyView()
{
InitializeComponent();
Groups = new ObservableCollection<Group>();
Group group;
group = new Group() { GroupHeader = "GroupHeader 1", RowElements = new ObservableCollection<RowElement>() };
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 1" , RowValue = 5d } );
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 2" , RowValue = 3.2d } );
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 3" , RowValue = 1.9d } );
Groups.Add( group );
group = new Group() { GroupHeader = "GroupHeader 2" , RowElements = new ObservableCollection<RowElement>() };
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 1" , RowValue = 4d } );
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 2" , RowValue = 9d } );
Groups.Add( group );
group = new Group() { GroupHeader = "GroupHeader 3" , RowElements = new ObservableCollection<RowElement>() };
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 1" , RowValue = 4.32d } );
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 2" , RowValue = 7.98d } );
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 3" , RowValue = 2.36d } );
group.RowElements.Add( new RowElement() { RowHeader = "RowHeader 4" , RowValue = 12d } );
Groups.Add( group );
}
public ObservableCollection<Group> Groups { get; set; }
}
}
Как вы можете видеть на рисунке, элементы LixtBoxItems в верхнем уровне ListBox должны быть полностью растянуты.Независимо от того, что я делаю, элементы отображаются с тем размером, который им действительно нужен, а не с постоянным размером.
Что я делаю не так?