如何让WinUI横向ListView的项水平拉伸填充父容器?
WinUI 3 ListView横向填充父容器解决方案
你当前使用StackPanel作为横向ItemsPanel的问题在于:StackPanel的布局逻辑是仅为子元素提供其所需的最小空间,不会将剩余可用空间分配给子项,因此即便设置ListViewItem的HorizontalContentAlignment="Stretch",也无法让项填充整个横向区域。
正确的解决方案是使用UniformGrid替代StackPanel作为ItemsPanel,它会自动将父容器的可用空间均匀分配给每个子项,无需手动计算宽度。
修改后的MainPage.xaml代码
<Grid Grid.Row="1" Height="40"> <ListView ItemsSource="{x:Bind ViewModel.Numbers}"> <ListView.ItemsPanel> <ItemsPanelTemplate> <!-- 设置Rows=1实现横向均匀布局,自动平分可用宽度 --> <UniformGrid Rows="1" /> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <!-- 确保ListViewItem自身拉伸填充容器空间 --> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <!-- 可选:移除默认内边距,让项完全贴合容器 --> <Setter Property="Padding" Value="0" /> </Style> </ListView.ItemContainerStyle> <ListView.ItemTemplate> <DataTemplate x:DataType="models:MyClass"> <!-- Border设置横向拉伸,填充ListViewItem的空间 --> <Border BorderBrush="red" BorderThickness="1" HorizontalAlignment="Stretch"> <TextBlock Text="{x:Bind Number}" HorizontalAlignment="Center" /> </Border> </DataTemplate> </ListView.ItemTemplate> </ListView> </Grid>
关键说明
UniformGrid Rows="1":强制所有项在单行排列,每个项自动平分父Grid的可用水平空间,项数量变化时会自动调整宽度。HorizontalContentAlignment="Stretch":确保ListViewItem的内容区域完全填充Item自身的空间。- 移除
Padding是可选操作:默认ListViewItem带有内边距,会导致项与容器之间出现空隙,可根据视觉需求调整。
内容的提问来源于stack exchange,提问作者Rui Barreiros
相关产品推荐
相关产品推荐

