-1

C#、Silverlight、Visual Studio for Windows Phone 7 を使用しています。

スクロールがスクロールを終了したときに発生するイベントを探しています。特定の要素の最終的な位置を取得することに興味があります。

スクロール中に 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 に答える