有没有办法检测是否ScrollViwer
处于ListView
滚动模式并停止滚动。在 windows phone 8.1ListView
中,我们无法获得滚动查看器的引用。
有人在 windows phone 8.1 WinRT 应用程序中做过吗?
有没有办法检测是否ScrollViwer
处于ListView
滚动模式并停止滚动。在 windows phone 8.1ListView
中,我们无法获得滚动查看器的引用。
有人在 windows phone 8.1 WinRT 应用程序中做过吗?
一旦 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();
您可以使用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;
在获取滚动视图之前,您必须将数据加载到列表视图。如果列表视图有空行,那么你得到的滚动视图将为空。