我正在使用C#,Silverlight,Visual Studio for Windows Phone 7。
我正在寻找滚动完成滚动时触发的事件。我有兴趣获得某些元素的最终位置。
在滚动期间,LayoutUpdated会被触发几次,但在滚动结束时则不一致。 ManipulationCompleted完成了一些工作,但如果用户在滚动条上进行“轻弹”动作,ManipulationCompleted会在滚动停止移动之前触发。
请注意,我在Silverlight中工作,滚动ScrollChanged之类的事件根本就不存在。
提前致谢。
答案 0 :(得分:0)
我通过点击ScrollViewer的VisualStateGroup解决了这个问题。
// uie is a UIElement
IEnumerable<ScrollViewer> svList = uie.GetVisualDescendants<ScrollViewer>();
if (svList.Count() > 0)
{
// Visual States are always on the first child of the control
FrameworkElement element = VisualTreeHelper.GetChild(svList.First<ScrollViewer>(), 0) as FrameworkElement;
// getting all the visual state groups
IList groups = VisualStateManager.GetVisualStateGroups(element);
foreach (VisualStateGroup group in groups)
{
if (group.Name == "ScrollStates")
{
group.CurrentStateChanged += new EventHandler<VisualStateChangedEventArgs>(group_CurrentStateChanged);
}
}
}
private static void group_CurrentStateChanged(object sender, VisualStateChangedEventArgs e)
{
if (e.NewState.Name == "NotScrolling")
{
isNotScrolling = true;
}
else
{
isNotScrolling = false;
}
}
我遇到的唯一问题是ScrollStates的状态变化非常缓慢,因此应用程序触发的其他事件将在代码甚至注册滚动之前处理。