Я действительно нашел способ сделать это. Ура! Большая заслуга в документе, найденном на этой странице . Обратите внимание, что мы распространяем наше приложение на диске; Эти инструкции не будут работать для приложения 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>