2009-10-08 21 views
1

J'ai une application qui contient de nombreux contrôles sur un panneau, chacun avec sa propre vidéo de lecture MediaElement. J'ai examiné les nouvelles fonctionnalités de virtualisation de l'interface utilisateur de Silverlight 3 pour améliorer les performances lors du défilement de plusieurs de ces contrôles dans un port d'affichage plus petit. D'après mon expérience, je crois comprendre qu'à chaque fois qu'un contrôle MediaElement est supprimé puis rajouté à l'arborescence visuelle, le média doit être ré-initialisé. J'imagine qu'essayer d'implémenter la virtualisation de l'interface utilisateur sur n'importe quel type de panneau personnalisé rempli de contrôles MediaElement empêcherait les éléments hors écran d'arrêter de jouer, puis de les rebuffer avant de les jouer dès qu'ils défilent sur l'écran. Quelqu'un at-il eu une expérience avec cette situation?Silverlight MediaElement et la virtualisation de l'interface utilisateur

Si tel est le cas, existe-t-il des solutions de contournement ou des moyens possibles pour implémenter la virtualisation de l'interface utilisateur avec des contrôles contenant MediaElements sans affecter la lecture en cours?

Répondre

2

Je ne pense pas qu'il y ait une bonne solution à ce problème, j'ai dû faire face au même problème de remplacement en implémentant le glisser-déposer puisque les contrôles devaient être temporairement supprimés et ré-ajoutés au nouvel emplacement dans l'arborescence visuelle, provoquant le MediaElement à rebuffer. Au cas où quelqu'un d'autre a ce problème, ma meilleure solution consiste à utiliser VideoBrush sur les contrôles réels avec tous les MediaElements correspondants étant ajoutés à un panneau caché au niveau de l'application. Si le contrôle quitte temporairement l'arborescence visuelle (en raison de la virtualisation de l'interface utilisateur ou du glisser-déposer), seul VideoBrush est supprimé et le MediaElement réel reste sur le panneau masqué, donc aucune ré-écriture ne se produit.