如何使用自定义项目模板修复列表框的布局

时间:2019-05-04 17:16:03

标签: .net wpf xaml

我已将自定义ItemTemplate应用于ListBox控件,但布局存在问题。当列表框滚动到底部并调整大小时,该项目溢出:

ListBox Layout Issue

看来,如果我向上滚动,布局最终会得到纠正:

ListBox Corrected

如果我删除了设置Horizo​​ntalContentAlignment的行,问题就消失了(但是我希望列表项能够拉伸以填充可用空间)...

任何帮助将不胜感激。

<ListBox x:Name="myList" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Visible">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="HorizontalContentAlignment"  Value="Stretch"></Setter>
            </Style>
        </ListBox.ItemContainerStyle>            
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Background="Lime" TextWrapping="Wrap" Text="{Binding Comments}"/>
                    <Grid Grid.Column="1" Background="Aqua">
                        <Button Width="20" Height="20" Content="..."/>
                    </Grid>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

1 个答案:

答案 0 :(得分:1)

ItemsPanel的默认ListBoxVirtualizingStackPanel,这严重地解决了Stretch对齐问题。而是尝试仅使用一列的UniformGrid

<ListBox.ItemsPanel>
    <ItemsPanelTemplate>
        <UniformGrid Columns="1"/>
    </ItemsPanelTemplate>
</ListBox.ItemsPanel>