2009-10-08 143 views
1

我有一个应用程序包含面板上的许多控件,每个控件都有自己的MediaElement播放视频。我一直在研究Silverlight 3的新的UI虚拟化功能,以便在较小视图端口中滚动浏览许多这些控件时提高性能。Silverlight MediaElement和UI虚拟化

从我的经验来看,我的理解是,只要MediaElement控件被删除,然后重新添加到可视化树中,媒体就必须重新排版。我猜测试图在任何装有MediaElement控件的自定义面板上实现UI虚拟化会导致任何屏外元素停止播放,然后在它们滚动到屏幕上之前立即重新播放。有没有人有过这种情况的经验?

如果是这种情况,是否有任何解决方法或可能的方式来实现带有包含MediaElements的控件的UI虚拟化,而不影响正在进行的播放?

回答

2

我不认为这个问题有什么很好的解决方案,我遇到了同样的重新缓存问题实现拖放,因为控件必须暂时删除,然后重新添加到视觉树中的新位置,导致MediaElement被拒绝。

如果其他人有这个问题,我最好的解决方法是在实际控件上使用VideoBrush,将所有相应的MediaElement添加到应用程序级的隐藏面板中。如果控件暂时离开视觉树(由于UI虚拟化或拖放),只有VideoBrush被移除,并且实际的MediaElement停留在隐藏面板上,因此不会发生重新缓存。