嘿伙计们,每当有一个新项目被添加到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
}
}
答案 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。可能这会有所帮助!!