Как изменить цвет фона для загрузки приложения Silverlight 3 без браузера? - PullRequest
3 голосов
/ 24 марта 2010

При запуске нашего приложения Silverlight 3 вне браузера запуск занимает немного времени, но он достаточно длинный, чтобы быть заметным. Во время этого запуска фон окна, в котором размещено приложение, отображает уродливый белый цвет фона. При работе в браузере у нас есть заставка, но она загружается через JavaScript, конечно. Как получить заставку, работающую для Silverlight 3 без браузера? Или, если это невозможно, могу ли я хотя бы изменить цвет фона окна?

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

Я действительно нашел способ сделать это. Ура! Большая заслуга в документе, найденном на этой странице . Обратите внимание, что мы распространяем наше приложение на диске; Эти инструкции не будут работать для приложения Silverlight, установленного пользователем из Интернета.

Оказывается, программа запуска Silverlight загружает HTML-страницу при запуске. Где приложение установлено, есть файл index.html. На странице есть тег <object>, аналогичный тегу, используемому для размещения Silverlight в Интернете.

К сожалению, этот <object> не поддерживает XAML-заставку Silverlight или индикатор прогресса, что, как я полагаю, следует ожидать, так как XAP не загружается. Кроме того, установка цвета фона страницы или <object> также, кажется, не вступает в силу. Однако оказывается, что просто Windows начинает рисовать плагин, поэтому при этом отображается цвет окна по умолчанию.

Чтобы обойти это, я установил visibility <div>, в котором находится Silverlight, на hidden. Затем в нижней части HTML я добавил <script>, который устанавливает таймер. Когда таймер срабатывает, visibility из <div> изменяется на visible, и объект Silverlight получает фокус. Даже если таймер установлен на 1 миллисекунду, это дает возможность узлу HTML выполнить начальное рисование веб-страницы. Это позволяет отображать любой контент под Silverlight.

Вот вся моя 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 голосов
/ 25 марта 2010

К сожалению, в Silerlight 3 нет способа настроить это.

...