-1

我正在为 Windows Phone 7 使用 C#、Silverlight、Visual Studio。

我正在寻找一个在滚动完成滚动时触发的事件。我有兴趣获得某些元素的最终位置。

LayoutUpdated 在滚动期间被触发了几次,但在滚动结束时并不一致。ManipulationCompleted 有时会起作用,但如果用户在滚动条上进行“轻弹”动作,则 ManipulationCompleted 会在滚动条停止移动之前触发。

请注意,我在 Silverlight 中工作,并且像ScrollChanged这样的滚动事件根本不存在。

提前致谢。

4

1 回答 1

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 的状态变化非常缓慢,因此应用程序触发的其他事件将在您的代码甚至注册滚动之前处理。

于 2012-11-06T16:44:42.450 回答