ListView 中的内容对齐不正确

Incorrect content alignment inside ListView

我正在开发 UWP 应用程序,我发现 ListView 中的内容对齐存在问题。正如文档所说,我们应该使用 ListView.VerticalContentAlignment 属性 来对齐内容,但我发现 属性 被忽略,而是使用默认值。

例如这个简单的应用程序:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView ItemsSource="{x:Bind Data}" VerticalContentAlignment="Top">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="x:String">
                <TextBlock Text="{x:Bind}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

后面的代码是这样的:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }


    public List<string> Data { get; set; } = new List<string>()
    {
        "a","b","c","d","e"
    };
}

有以下输出:

尽管 ListView.VerticalContentAlignment 已设置。我检查了 Live Visual Tree 中的 ListViewItemPresenter(TextBlock 容器),默认值在那里,但被忽略了,而是使用了 ListViewItemPresenterVerticalContentAlignment。

Microsoft doc 说,我应该使用 ContentPresenter.VerticalContentAlignmentProperty 而不是 ListViewItemPresenterVerticalContentAlignmentProperty。这只是错误,还是我做错了什么?有办法解决这个问题吗?

ListView.VerticalContentAlignment 正在将列表视图与表单顶部对齐。水平列表视图中的项目与中心对齐。尝试在 textBlock

上设置对齐方式
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="x:String">
            <TextBlock Text="{x:Bind}" VerticalAlignment="Top" />
        </DataTemplate>
    </ListView.ItemTemplate>

也许你可以尝试像这样修改 ItemContainerStyle:

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

@Patrik 我还观察到这个问题并注意到,如果我在列表视图属性 (xaml) 中剪切并粘贴此 ItemContainerStyle,而调试器是 运行,则会应用垂直内容对齐,否则不会应用。 我通过在列表视图样式中添加 ItemContainerStyle 来解决这个问题,现在它似乎可以工作(始终应用)。

P.S。这个问题是很久以前的了,不过,发布这个只是为了帮助其他人看到这个问题。