如何在ListView中拉伸ListViewItem

11

开发者。

我尝试在水平方向上拉伸列表视图项。 我重置了ItemContainerStyle,并将水平对齐方式设置为stretch。 以下是MainPage.xaml中的所有代码。

<Grid x:Name="rootGrid"
      HorizontalAlignment="Stretch"
      MinWidth="320"
      MaxWidth="480"
      Width="Auto">
    <ListView x:Name="infoFlowListView" 
              MinWidth="320"
              MaxWidth="480"
              Width="Auto"
              HorizontalAlignment="Stretch">
        <ListView.ItemTemplate>
            <DataTemplate>
                <local:MyUserControl1 MinWidth="300" HorizontalAlignment="Stretch"></local:MyUserControl1>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
</Grid>

这里是MainPage.xaml.cs文件中的所有代码。

public MainPage()
    {
        var items = new List<MyUserControl1>();
        for (int i = 0; i < 50; i++)
        {
            items.Add(new MyUserControl1());
        }
        this.InitializeComponent();
        infoFlowListView.ItemsSource = items;
    }

这里是MyUserControl.xaml中的所有代码。

<Grid>    
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"></ColumnDefinition>
    <ColumnDefinition Width="4*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition Height="Auto"></RowDefinition>
    <RowDefinition Height="*"></RowDefinition>
    <RowDefinition Height="Auto"></RowDefinition>
    <RowDefinition Height="8"></RowDefinition>
</Grid.RowDefinitions>

<Ellipse Width="60" Height="60"
         Grid.Column="0" Grid.Row="0" Grid.RowSpan="3"
         VerticalAlignment="Center" 
         HorizontalAlignment="Center" 
         Stretch="Uniform">
    <Ellipse.Fill>
        <ImageBrush ImageSource="Assets/1.png"></ImageBrush>
    </Ellipse.Fill>
</Ellipse>

<RelativePanel x:Name="topRelativePanel"
               Grid.Column="1" Grid.Row="0"
               HorizontalAlignment="Stretch">
    <TextBlock Text="TestName"
               VerticalAlignment="Bottom"
               RelativePanel.AlignLeftWithPanel="True"
               FontSize="12"
               HorizontalAlignment="Stretch"></TextBlock>
    <TextBlock Text="Author"
               VerticalAlignment="Bottom"
               RelativePanel.AlignRightWithPanel="True"
               FontSize="12"
               HorizontalAlignment="Stretch"
               Margin="0,0,8,0"></TextBlock>
</RelativePanel>

<TextBlock x:Name="nameTextBlock"
           Grid.Column="1" Grid.Row="1"
           Text="Name" 
           TextTrimming="WordEllipsis"
           VerticalAlignment="Stretch"
           HorizontalAlignment="Stretch"
           FontSize="18" >
</TextBlock>

<Grid x:Name="bottomGrid"
      Grid.Column="1" Grid.Row="2"
      VerticalAlignment="Top"
      HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="3*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="0"
               HorizontalAlignment="Stretch"
               Text="90"></TextBlock>
    <TextBlock Grid.Column="1"
               HorizontalAlignment="Stretch"
               Text="48"></TextBlock>
    <TextBlock Grid.Column="2"
               HorizontalAlignment="Stretch"
               Text="20170330 08:33"
               Margin="0,0,0,0"></TextBlock>
</Grid>

<Border Background="LightGray"
        VerticalAlignment="Stretch"
        HorizontalAlignment="Stretch"
        Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2"></Border>

我在6寸模拟器上测试了这些代码,并附上了一个示例的截图。

移动端模拟器没有相同的结果。以下是不同模拟器的屏幕截图。 4英寸 示例截图 这些截图的右侧不同。


你可能在InfoListViewItemUserControl方面遇到了问题,而且你还没有提交那段代码。其他部分看起来都没问题。 - Ivan Ičin
@IvanIčin,我提交了用户控件的XAML文件,请问您能告诉我问题出在哪里吗?非常感谢。 - maoleigepu
我认为下面的答案是正确的,如果您设置了MaxWidth,则会使Stretch对齐失效。 - Ivan Ičin
你能否提供一个 [mcve] 项目? - Sunteen Wu
@SunteenWu-MSFT 我不知道如何上传项目,所以我复制了示例的所有代码。 - maoleigepu
2个回答

33

我尝试在水平方向上拉伸列表视图项。

您需要为ListViewItem设置HorizontalContentAlignment属性,而不是HorizontalAlignment。使用以下代码,ListViewItem的内容将会被拉伸。

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment"  Value="Stretch"></Setter>
    </Style>
</ListView.ItemContainerStyle>

默认的 ListViewItem 样式和模板 没有打开 HorizontalAlignment 设置器,但是打开了 HorizontalContentAlignment


2
那是我的错。非常感谢,这非常有帮助! - maoleigepu

1
我认为这是因为ListView.ItemTemplate控件具有MaxWidth="400"属性。

我已经移除了用户控件的最大宽度,但是ListViewItem在水平方向上仍然无法拉伸。 - maoleigepu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接