Wpf ScrollIntoView()在WP7中似乎不起作用

Wpf ScrollIntoView()在WP7中似乎不起作用,wpf,silverlight,windows-phone-7,Wpf,Silverlight,Windows Phone 7,每当向itemssource添加新项时,我都想将listbox滚动条移到底部,但是如果我向它传递对新添加项的引用或其索引,则ScrollIntoView()似乎没有任何作用。有没有人能做到这一点,或者对如何将列表框向下滚动到底有什么其他建议 一些代码: void Actions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) {

每当向itemssource添加新项时,我都想将listbox滚动条移到底部,但是如果我向它传递对新添加项的引用或其索引,则
ScrollIntoView()
似乎没有任何作用。有没有人能做到这一点,或者对如何将列表框向下滚动到底有什么其他建议

一些代码:

    void Actions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        //if a new item was added, set it to the selected item
        if (e.NewItems != null)
        {
            MainListBox.SelectedIndex = e.NewStartingIndex;

            //MainListBox.ScrollIntoView(MainListBox.Items.Last());     //todo: this doesnt seem to work
        }
    }

ScrollIntoView
绝对有效。我刚刚在一个空的数据绑定应用程序中添加了一个应用程序按钮,并在按钮单击时执行以下操作,导致列表滚动

MainListBox.ScrollIntoView(MainListBox.Items.Last());
selectionChanged
上的事件可能存在问题?你有什么与之相关的吗?
如果不设置所选项目,ScrollIntoView是否有效?

MSDN说明:

当ItemsSource集合的内容发生更改时,特别是当集合中添加或删除了许多项时,您可能需要在调用ScrollIntoView之前调用UpdateLayout(),以使指定项滚动到视口中

这可能是你的问题吗?

答案如下:

简单地说:这些项是异步加载到列表框中的,因此如果在CollectionChanged事件(或类似事件)中调用ScrollIntoView(),它将不会有任何项,因此不会滚动


希望它对我有帮助,它确实对我有帮助!;-)

您可以通过

您的项目列表。插入(0,项目)


因此,不需要ScrollIntoView。也许这会有帮助

太好了!这把它修好了。感谢堆:)嗨,Matt,.Last()方法来自哪里?我向集合中添加了一个新项,但不知道索引-我的项类中没有此方法?@Rodney
.Last()
是系统中IEnumerable的扩展方法。Linq
lb.ScrollIntoView(lb.Items[lb.Items.Count-1])
也可以使用。我不知道
ItemCollection
上的契约,但我有根据地猜测
.Last()
扩展方法将是O(n),如果集合跟踪元素的数量,直接索引将是O(1)。我可能完全错了,而且
.Last()
显然不太容易出现打字错误。对于MVVM应用程序,这才是真正的答案