解决了我在这里的闪烁问题Windows Store App ListView flickering / content dispappearing我面临动画问题。
为了把事情放在上下文中,我正在建立一个由两个ListViews
组成的对话应用程序(聊天应用程序)。
当用户点击左侧面板中的线程时,相应的会话将加载到会话ListView中。这里没什么太复杂的。
问题在于动画。如果可能的话,我想坚持使用默认的内置动画,因为我很满意它们并且符合Metro UI GuideLines。
我们假设您有两个主题。第一个包含1000个消息对话,而另一个包含100个消息。 如果我点击第一个主题(大主题),会话加载就好了,默认动画。我们假设我一直滚动到底部以读取最新消息,就像在任何消息传递应用程序中一样。如果我现在点击较小的线程,会话会更新并加载新的会话集合。默认动画发生,更重要的是,不需要滚动:我已经在底部了!
如果我试着回到大线程,我会在长时间的谈话中留在某处。出现默认动画,但我必须一直滚动到底部。
使用ScrollIntoView(item)
可以滚动到底部。在更改ItemsSource
内容后立即调用此方法,会中断默认动画。
更重要的是,动画是可怕的,发生如下:旧的消息仍然是静止的,新的消息(来自新加载的对话)出现在旧的消息之上,然后旧消息最终消失。这简直太难看了。
如何设置或使用滚动条使其保持在底部,允许ListView显示最后一个条目并使用默认动画?
在调用ScrollIntoView()之前使用DispatcherTimer
产生轻微延迟(500ms)允许默认动画发生(意味着它们实际上仍在那里,但在自动滚动之前被“覆盖”)触发。这比我以前的情况要好一些,但仍然很奇怪。还有其他方法吗?谢谢!