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。这个问题是很久以前的了,不过,发布这个只是为了帮助其他人看到这个问题。
我正在开发 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。这个问题是很久以前的了,不过,发布这个只是为了帮助其他人看到这个问题。