有没有办法检测是否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;
在获取滚动视图之前,您必须将数据加载到列表视图。如果列表视图有空行,那么你得到的滚动视图将为空。