有没有办法检测ScrollViwer
ListView
处于滚动模式并停止滚动。在Windows Phone 8.1 ListView
中,我们无法获得scrollviewer的参考。
有人在Windows Phone 8.1 WinRT应用程序中完成了吗?
答案 0 :(得分:6)
ListView为Loaded
后,您可以获得ScrollViewer
,如下所示:
var sv = (ScrollViewer)VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.ListV, 0), 0);
修改强>
正如Romasz建议的那样,一旦获得ScrollViewer
,就可以使用其ViewChanged
事件来监控滚动时间和停止时间。
此外,这是我用于遍历可视树的通用扩展方法:
// The method traverses the visual tree lazily, layer by layer
// and returns the objects of the desired type
public static IEnumerable<T> GetChildrenOfType<T>(this DependencyObject start) where T : class
{
var queue = new Queue<DependencyObject>();
queue.Enqueue(start);
while (queue.Count > 0) {
var item = queue.Dequeue();
var realItem = item as T;
if (realItem != null) {
yield return realItem;
}
int count = VisualTreeHelper.GetChildrenCount(item);
for (int i = 0; i < count; i++) {
queue.Enqueue(VisualTreeHelper.GetChild(item, i));
}
}
}
要使用此方法获取ScrollViewer
,请执行以下操作:
var sv = yourListView.GetChildrenOfType<ScrollViewer>().First();
答案 1 :(得分:4)
您可以使用 VisualTreeHelper 找到 ListView 的 ScrollViewer 。例如:
// method to pull out a ScrollViewer
public static ScrollViewer GetScrollViewer(DependencyObject depObj)
{
if (depObj is ScrollViewer) return depObj as ScrollViewer;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = GetScrollViewer(child);
if (result != null) return result;
}
return null;
}
获得 ScrollViewer 后,您可以订阅其活动:
GetScrollViewer(yourListView).ViewChanged += yourEvent_ViewChanged;
答案 2 :(得分:-1)
在获取scrollview之前,您必须将数据加载到listview。如果listview有空行,那么你得到的scrollview将为null。