QA@IT

Windows Phone 7でListBoxをひっぱってコンテンツを更新させる仕組みを作ることは可能でしょうか

2186 PV

iOSアプリではUITableViewを引っぱってヘッダを表示させ、一定以上ひっぱったらコンテンツを更新するようなUIをよく見かけます。(実装例: http://ameblo.jp/xcc/entry-10490740939.html )

これをWindows Phone 7でも実装したいと考えております。ListBoxコントロールを使った場合、どうしたらよいでしょうか。

回答

手元にこんなコードがありましたので、ご紹介します。 Stack Overflow あたりで見つけたコードだと思うんですけど、よく覚えてません。ゴメンナサイ。

    // コンストラクター
    public MainPage()
    {
        InitializeComponent();

        listBox1.ManipulationCompleted += (sender, e) =>
        {
            var scroll_viewer = FindChildOfType<ScrollViewer>(listBox1);
            if (scroll_viewer == null) return;

            if (scroll_viewer.VerticalOffset >= (scroll_viewer.ScrollableHeight))
            {
                MessageBox.Show("最後だよ!");
            }
            else if (scroll_viewer.VerticalOffset == 0)
            {
                MessageBox.Show("最初だよ!");
            }
        };
    }

    /* FindChildOfType() 
     * from e in root.ChildElements where e is T select e
     * 
     * This code is from http://bit.ly/puiu1B (StackOverflow). Thanks !
     * See http://bit.ly/jA5Qj3 , too.
     */
    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 = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
            {
                var child = VisualTreeHelper.GetChild(current, i);
                var typedChild = child as T;
                if (typedChild != null)
                {
                    return typedChild;
                }
                queue.Enqueue(child);
            }
        }
        return null;
    }

ちょっと判定がうまくいかないことがあるみたいですが。実際動いている画像を貼り付けたかったのだけど、うまくいきませんでした。ゴメンナサイ。

あとは偉い人にお任せ!

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。