Silverlight MediaElement和UI虚拟化

时间:2009-10-08 16:20:05

标签: c# silverlight mediaelement buffering ui-virtualization

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

根据我的经验,我的理解是,每当MediaElement控件被移除然后重新添加到可视树中时,媒体必须重新缓冲。我猜测试图在任何填充MediaElement控件的自定义面板上实现UI虚拟化会导致任何屏幕外元素停止播放,然后在播放到屏幕后立即重新缓冲。有没有人对这种情况有任何经验?

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

1 个答案:

答案 0 :(得分:2)

我不认为这个问题有什么好的解决方案,因为必须暂时删除控件然后在可视化树中的新位置重新添加,因此我遇到了实施拖放的同一个重新缓冲问题,导致要回收的MediaElement。

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