我有一些漂亮的动画,当我向列表框中添加项目时会显示淡入效果。我认为在每个添加的项目之间放置一个轻微的延迟可能很酷,这样就可以在所有项目被添加时产生一个漂亮的级联效果(LB使用水平StackPanel)。由于我永远不会有一个结果集> 10项,所以对我来说这似乎并不太糟糕。
问题是,列表框不会在每次添加后立即添加该项,而是等待我的方法完成,然后批量显示所有新项目。因此,对于下面夸张的示例,我的页面会冻结10秒钟,然后出现所有十个项目。
我如何让Silverlight每秒只显示一个项目?(是的,我知道这将是一种痛苦的用户体验。实际延迟会小得多)
[这里是显示如何进行LB项目动画的文章链接,尽管大多数阅读本文的人可能已经看过了]
编辑
下面的答案很完美,但这里有一个稍微简单一点的版本,没有递归。
问题是,列表框不会在每次添加后立即添加该项,而是等待我的方法完成,然后批量显示所有新项目。因此,对于下面夸张的示例,我的页面会冻结10秒钟,然后出现所有十个项目。
private void bookItemsLoaded(DownloadStringCompletedEventArgs e) {
BookResults.Clear();
foreach (AmazonTitleSearchResultDTO item in BookItemDTOLoader.LoadObjects(e.Result)) {
BookResults.Add(new AmazonExplorerBookItemViewModel() { ImageURL = item.CoverURL, Title = item.Title, ASIN = item.ASIN });
Thread.Sleep(1000);
}
}
我如何让Silverlight每秒只显示一个项目?(是的,我知道这将是一种痛苦的用户体验。实际延迟会小得多)
[这里是显示如何进行LB项目动画的文章链接,尽管大多数阅读本文的人可能已经看过了]
编辑
下面的答案很完美,但这里有一个稍微简单一点的版本,没有递归。
//get all the items to add into a local, tmeporary list, and call this method:
private void AddBookToResults(List<AmazonTitleSearchResultDTO> bookList)
{
DispatcherTimer Timer = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 1) };
int index = 0;
Timer.Tick += (s, e) => {
ItemCollection.Add(temp[index++]);
if (index == temp.Count)
Timer.Stop();
};
Timer.Start();
}