Chr*_*Rae 8 silverlight listbox windows-phone-7
我正在努力让一个应用程序很好地从墓碑式回来.该应用程序包含大型列表框,所以我最好滚动回到用户在这些列表框中滚动时的位置.
跳回到特定的SelectedItem很容易 - 不幸的是,对我来说,我的应用程序从不需要用户实际选择项目,他们只是滚动它们.我真正想要的是某种MyListbox.ScrollPositionY,但它似乎不存在.
有任何想法吗?
克里斯
Ant*_*nes 10
您需要掌握内部ScrollViewer
使用的内容,ListBox
以便您可以获取VerticalOffset
属性的值并随后调用该SetVerticalOffset
方法.
这要求您从ListBox
构成其内部的可视树中向下延伸.
我使用这个方便的扩展类,你应该添加到你的项目中(我必须把它放在博客上因为我不断重复它): -
public static class VisualTreeEnumeration
{
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root, int depth)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
if (depth > 0)
{
foreach (var descendent in Descendents(child, --depth))
yield return descendent;
}
}
}
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
return Descendents(root, Int32.MaxValue);
}
public static IEnumerable<DependencyObject> Ancestors(this DependencyObject root)
{
DependencyObject current = VisualTreeHelper.GetParent(root);
while (current != null)
{
yield return current;
current = VisualTreeHelper.GetParent(current);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个ListBox
(以及所有其他UIElements)可以获得一些新的扩展方法Descendents
和Ancestors
.我们可以将这些与Linq结合起来搜索内容.在这种情况下,您可以使用: -
ScrollViewer sv = SomeListBox.Descendents().OfType<ScrollViewer>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4697 次 |
最近记录: |