UWP 对 ListView 使用 Shy Header

Posted

技术标签:

【中文标题】UWP 对 ListView 使用 Shy Header【英文标题】:UWP Use Shy Header for ListView 【发布时间】:2020-01-27 08:34:16 【问题描述】:

我基本上是从here 复制代码,然后将变量更改为我的。我还复制了 ExpressionBuilder 文件夹下的文件。

而在ShyHeader.cs里面,有这样一行代码:

var scrollViewer = gridView.GetFirstDescendantOfType<ScrollViewer>();

所以我为我的ListView 尝试了同样的事情,但它显示未定义:

SongsListView.GetFirstDescendantOfType<ScrollViewer>()

所以我在SongsListView 周围放了一个ScrollViewer 并使用它。但我无法让它为我的项目工作。标题既不粘在上面也不害羞。它只是正常滚动。谁能帮我调试一下?

SongsListView 是here。

SongsListView 使用here in HeaderedPlaylistControl。

ShyHeader 在底部实现here。

HeaderPlaylistControl 用于AlbumPage、MyFavoritesPage 和PlaylistsPage。

【问题讨论】:

GetFirstDescendantOfType可能是GridView的扩展方法。 使用我自己的ScrollViewer 怎么样?为什么它不起作用?我什至使用ScrollHeader 并将其Mode 设置为“粘性”。但是标题仍然不粘。这发生在我尝试实现 Shy Header 之前。 请查看VisualTreeHelperExtensions.cs 类,它基于VisualTreehHelper。 如您所知,每个 ListView 都包含用于滚动内容的 ScrollViewer 使用这个方法你可以把这个扩展复制到你的项目中,这是一个扩展类,它适用于所有DependencyObject 【参考方案1】:

所以我为我的 ListView 尝试了同样的事情,但它显示未定义

这是 DependencyObject 的扩展方法。您可以找到它here 并将其复制到您的项目中。

所以我在 SongsListView 周围放置了一个 ScrollViewer 并使用它。但我无法让它为我的项目工作。

我检查了您的代码,您需要在PlaylistInfoGrid 加载时调用SetShyHeadermet 方法。

private void PlaylistInfoGrid_Loaded(object sender, RoutedEventArgs e)

    SetShyHeader();

【讨论】:

以上是关于UWP 对 ListView 使用 Shy Header的主要内容,如果未能解决你的问题,请参考以下文章

UWP IsNullOrEmptyStateTrigger 不适用于 ListView

滚动到 UWP 的 ListView 中的新项目

UWP中通过x:bind将数据绑定到ListView

如何使用 AdvancedCollectionView 源更新 UWP ListView 中的项目

UWP:ListView ItemClick 不起作用

如何在 Xamarin UWP 上的 ListView 中释放内存?