Windows Phone 8 SDK (silverlight/wpf) の ScrollViewer のスクロール オフセットによって位置が直接関連付けられるコントロールが必要です。さらに、他のアプリ内プロパティを変更できるように、ある種のデリゲートのスクロール オフセットを知ることができる必要があります。これは可能ですか?
私はすべてを見てきましたが、例を見つけることができず、これを取り上げるのに十分な WPF/Silverlight のアニメーションの概念を把握していないようです。
私が思いついた最高のものを以下に示します。最初は機能しているように見えますが、残念ながら、指が下になく、ScrollViewer がアニメーション化されていない場合にのみ更新されるため、更新の頻度が低すぎます。アニメーション ループの一部として更新を行う必要があるため、フレームごとに (1 秒あたり 60 ~ 100 以上)、新しいスクロール オフセット値を取得します。アニメーション ループで DispatchTimer をスケジュールする方法はありますか? または、DependentProperties のようなものを使用して、これに完全にアプローチするより良い方法があるでしょうか?
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (!App.ViewModel.IsDataLoaded)
        {
            App.ViewModel.LoadData();
        }
        DispatcherTimer t = new DispatcherTimer();
        t.Interval = TimeSpan.FromMilliseconds(16.6);
        t.Tick += new EventHandler(
            (object s, EventArgs ee) =>
                {
                    // FunkBox is some ListBox
                    ScrollViewer sv = FindChildOfType<ScrollViewer>(FunkBox);
                    if (sv == null) 
                    {
                        // TOffset is some TextBlock
                        TOffset.Text = "dur...";
                    }
                    else
                    {
                        TOffset.Text = String.Format("dur {0}", sv.HorizontalOffset);
                    }
                });
        t.Start();
    }
    static T FindChildOfType<T>(DependencyObject root) where T : class
    {
        var queue = new Queue<DependencyObject>();
        queue.Enqueue(root);
        while (queue.Count > 0)
        {
            DependencyObject current = queue.Dequeue();
            for (int i = System.Windows.Media.VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
            {
                var child = System.Windows.Media.VisualTreeHelper.GetChild(current, i);
                var typedChild = child as T;
                if (typedChild != null)
                {
                    return typedChild;
                }
                queue.Enqueue(child);
            }
        }
        return null;
    }