如何调整Listbox.ItemTemplate -columns的大小

时间:2020-06-16 10:00:27

标签: wpf listbox

我正在使用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.IsSharedSizeScopeSharedSizeGroup解决了我的问题:

    <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>

0 个答案:

没有答案
相关问题