3

Lors de l'exécution de notre application Silverlight 3 hors navigateur, le démarrage prend un peu de temps, mais il est assez long pour être visible. Au cours de ce démarrage, l'arrière-plan de la fenêtre hébergeant l'application affiche une couleur de fond blanc laide. Lors de l'exécution dans le navigateur, nous avons un écran de démarrage, mais cela est chargé via JavaScript bien sûr. Comment puis-je obtenir un écran de démarrage pour un Silverlight 3 hors navigateur? Ou si ce n'est pas possible, y a-t-il un moyen de changer au moins la couleur de fond de la fenêtre?Comment modifier la couleur d'arrière-plan d'une application Silverlight 3 hors navigateur?

Répondre

2

J'ai trouvé un moyen de le faire. Hourra! Beaucoup de mérite va au document trouvé au this page. Notez que nous distribuons notre application sur disque; ces instructions ne fonctionneront pas pour une application Silverlight installée par un utilisateur sur le Web.

Il s'avère que le lanceur Silverlight charge une page HTML au démarrage. Là où l'application est installée, il y a un fichier index.html. La page contient un tag <object> similaire à celui utilisé pour héberger Silverlight sur le Web.

Malheureusement, ce <object> ne supporte pas le XAML ou l'indicateur de progression de l'écran de démarrage de Silverlight, ce qui est prévisible puisque le XAP n'est pas en cours de téléchargement. En outre, la définition de la couleur d'arrière-plan de la page ou du <object> ne semble pas non plus prendre effet. Cependant, il se trouve que c'est juste que Windows commence immédiatement à dessiner le plugin, donc la couleur de la fenêtre par défaut est affichée en même temps. Pour contourner ce problème, j'ai défini le visibility du <div> qui héberge le Silverlight sur hidden. Ensuite, au bas du HTML, j'ai ajouté un <script> qui définit un minuteur. Lorsque la minuterie se déclenche, le visibility du <div> est remplacé par visible et l'objet Silverlight reçoit le focus. Même si la minuterie est définie sur 1 milliseconde, cela permet à l'hôte HTML de faire le dessin initial de la page Web. Cela permet à tout contenu sous le Silverlight d'apparaître.

Voilà toute ma page HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head> 
    <style type="text/css"> 
     html, body { height: 100%; overflow: hidden; background-color: black; } 
     body { padding: 0; margin: 0; } 

     #silverlightControlHost 
     { 
      height: 100%; visibility: hidden; position: absolute; 
     } 

     #splashScreen 
     { 
      background-image: url('blah.png'); 
      background-repeat: no-repeat; 
      width: 575px; 
      height: 330px; 
      top: 185px; 
      left: 212px; 
      color: white; 
      position: absolute; 
      font-family: Arial, Sans-Serif; 
     } 

     #loadingText 
     { 
      position: relative; 
      top: 165px; 
      text-align: center; 
      font-size: 18px; 
     } 
    </style> 
    </head> 
    <body scroll="no"> 
    <div id="silverlightControlHost"> 
     <object id='_sl' data="data:application/x-silverlight," type="application/x-silverlight" width="100%" height="100%"> 
      <param name="source" value="offline://1931574666.localhost"/> 
      <param name="background" value="Black"/> 
      <param name="enableGPUAcceleration" value="True"/> 
      <a href="http://go.microsoft.com/fwlink/?LinkID=124807" 
      style="text-decoration: none;"> 
       <img src="http://go.microsoft.com/fwlink/?LinkId=108181" 
       alt="Get Microsoft Silverlight" style="border-style: none"/> 
      </a> 
     </object> 
     <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe> 
    </div> 
    <div id="splashScreen"> 
     <div id="loadingText">Loading. Please wait...</div> 
    </div> 
    <script> 
     setTimeout(
      function() { 
       var ctrl = document.getElementById("silverlightControlHost"); 
       ctrl.style.visibility = "visible"; 
       document.getElementById('_sl').focus(); 
      }, 
      3000 
     ); 
    </script> 
    </body> 
</html> 
0

Malheureusement, Silerlight 3 ne permet pas de personnaliser cela.