我正在使用WPF中的ListBox控件。
我的ItemsSource-viewmodel有三个要显示在列表框中的属性。
为此,我创建了一个包含三列的DataTemplate,包括一个网格。
似乎这不是显示大量长度不同的数据的最佳方法。
如果不将宽度设置为固定值,则每个字段的列长度都会有所不同,具体取决于长度。
我的梦想是在列表框内使用一种表,该表会自动调整列的大小,如果窗口和列表框也随之调整大小。
这种数据模板的最佳方法是什么?
我的实际列表框:
<ListBox ItemsSource="{Binding Generators}" ScrollViewer.VerticalScrollBarVisibility="Auto" >
<ListBox.ItemTemplate>
<DataTemplate DataType="viewmodels:GeneratorListItem">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding GeneratorType}" Margin="5, 1, 1, 0" />
<TextBlock Grid.Column="1" Text="{Binding Specs}" Margin="5 1 1 0" />
<TextBlock Grid.Column="2" Text="{Binding ControlUnit}" Margin="5 1 1 0" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
使用*
作为列宽,内容看起来非常丑陋且混乱,因此我尝试使用固定的columnwidth。但这在调整列表框大小时不太好。
有什么建议吗?
编辑:
Grid.IsSharedSizeScope
和SharedSizeGroup
解决了我的问题:
<ListBox ItemsSource="{Binding Generators}" ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.IsSharedSizeScope="True">
<ListBox.ItemTemplate>
<DataTemplate DataType="viewmodels:GeneratorListItem">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="A"/>
<ColumnDefinition Width="*" SharedSizeGroup="B"/>
<ColumnDefinition Width="Auto" SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding GeneratorType}" Margin="5, 1, 1, 0" />
<TextBlock Grid.Column="1" Text="{Binding Specs}" Margin="5 1 1 0" />
<TextBlock Grid.Column="2" Text="{Binding ControlUnit}" Margin="5 1 1 0" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>