You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:13:23