我遇到listbox.ScrollIntoView
方法的问题 - 它不起作用。以下是代码段:
// the listbox is binded to a "Thumbnails" property
this.Thumbnails = new VirtualizableCollection<RecordingThumbnailItem>(this.thumbnailsProvider) { ItemsStep = this.ThumbnailsStep };
this.listBox.ScrollIntoView(this.Thumbnails[thumbnailToSelect]);
我注意到如果我稍后调用ScrollIntoView
(例如在定义绑定源后500毫秒内)一切正常。所以我想在控件获得某些特定状态后应该调用ScrollIntoView
;
如果是的话,我怎么能检测到它?也许使用一些活动?
最后,我只需要强制执行我的水平列表框以显示右端的最后一项,但不像往常一样显示左侧。也许存在其他一些方法?
答案 0 :(得分:1)
问题是代表尚未创建的每个项目的视图,因此视图无法滚动到屏幕上。
您可以使用Dispatcher
对ScrollIntoView()
调用进行排队,其优先级低于用户界面,这样可以在UI时间内生成视图。
试试这个:
this.Thumbnails = new VirtualizableCollection<RecordingThumbnailItem>(this.thumbnailsProvider) { ItemsStep = this.ThumbnailsStep };
Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.ContextIdle,
new Action(() => this.listBox.ScrollIntoView(this.Thumbnails[thumbnailToSelect])
);
如果CurrentDispatcher恰好是UI之一,那么您可能需要用Dispatcher.CurrentDispatcher
替换Application.Current.Dispatcher
。