在WP7中,ListBox.ScrollIntoView()似乎无法工作。

问题描述 投票:11回答:4

我想在 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
        }
    }
wpf silverlight windows-phone-7
4个回答
35
投票

MSDN说。

当ItemsSource集合的内容发生变化时,特别是当许多项目被添加到集合中或从集合中删除时,你可能需要在调用ScrollIntoView之前调用UpdateLayout()来让指定的项目滚动到视口。

这可能是你的问题吗?


5
投票

这就是答案。

http:/dotnet-experience.blogspot.com.es201012wpf-listview-scrollintoview.html。

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

希望它能帮到你,它肯定帮助了我!;-)


3
投票

ScrollIntoView 绝对有效。我只是在一个空的数据绑定应用程序中添加了一个应用程序按钮,在按钮点击时做如下操作,导致列表滚动。

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

可能是一个事件的问题 selectionChanged? 你有什么东西挂在上面吗?如果你不设置选中的项目,ScrollIntoView能不能用?


-2
投票

你可以通过以下方法将新项目始终插入到顶部。

yourItemList.Insert(0, item)。

这样就不需要ScrollIntoView了。也许这能帮到你!

© www.soinside.com 2019 - 2024. All rights reserved.