ListView中的内容对齐不正确

时间:2018-02-11 10:43:54

标签: c# listview uwp uwp-xaml listviewitem

我正在开发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"
    };
}

有以下输出: enter image description here

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

enter image description here

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

2 个答案:

答案 0 :(得分:2)

也许您可以尝试修改ItemContainerStyle,如下所示:

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

答案 1 :(得分:0)

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

    <ListView.ItemTemplate>
        <DataTemplate x:DataType="x:String">
            <TextBlock Text="{x:Bind}" VerticalAlignment="Top" />
        </DataTemplate>
    </ListView.ItemTemplate>