iOSアプリではUITableViewを引っぱってヘッダを表示させ、一定以上ひっぱったらコンテンツを更新するようなUIをよく見かけます。(実装例: http://ameblo.jp/xcc/entry-10490740939.html )
これをWindows Phone 7でも実装したいと考えております。ListBoxコントロールを使った場合、どうしたらよいでしょうか。
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;
}
ちょっと判定がうまくいかないことがあるみたいですが。実際動いている画像を貼り付けたかったのだけど、うまくいきませんでした。ゴメンナサイ。
あとは偉い人にお任せ!
この質問への回答やコメントをメールでお知らせします。