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

时间:2010-10-11 09:13:31

标签: wpf silverlight windows-phone-7

嘿伙计们,每当有一个新项目被添加到itemssource时,我想将列表框滚动条移动到底部,但是如果我将它传递给新添加的项目,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
        }
    }

4 个答案:

答案 0 :(得分:32)

MSDN说:

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

这可能是你的问题吗?

答案 1 :(得分:4)

这就是答案:

http://dotnet-experience.blogspot.com.es/2010/12/wpf-listview-scrollintoview.html

简而言之:这些项目是异步加载到ListBox中的,所以如果你在CollectionChanged事件(或类似的)中调用ScrollIntoView(),它将没有任何项目,所以没有滚动。

希望它有所帮助,它肯定对我有帮助! ; - )

答案 2 :(得分:3)

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

MainListBox.ScrollIntoView(MainListBox.Items.Last());

selectionChanged上的活动可能会出现问题吗?你有什么与此相关的吗?
如果您没有设置所选项目,ScrollIntoView是否有效?

答案 3 :(得分:-2)

您可以通过

始终将新项目插入到顶部

yourItemList.Insert(0,item);

因此不需要ScrollIntoView。可能这会有所帮助!!