Это все еще возможно, хотя опыт совсем другой. Вы должны загрузить исходный визуальный элемент Root через свойство источника объекта Silverlight, ссылающегося на файл XAML на сервере, но после этого у вас есть полный доступ к дереву визуалов через javascript.
Приведенные ниже файлы Test.html и Root.xaml вместе создадут тестируемую страницу, если они будут помещены в одну папку.
Обратите внимание на отличия от «стандартного» (т. Е. * .Xap source) сценария - для параметра «source» в теге объекта SL задан файл .XAML вместо файла .XAP. Файл .XAML также отличается от того, что вы получили бы в приложении SL по умолчанию в VS: x: Class = "MyApp.MainPage" отсутствует в корневом элементе, а корневым элементом является Grid (или любой элемент Visual). вместо элемента UserControl. Это связано с тем, что нет приложения (по крайней мере, не загруженного из .XAP - я предполагаю, что элемент управления SL фактически создает экземпляр приложения по умолчанию в процессе загрузки файла Root.XAML), и нет UserControl, поскольку отсутствует код позади , Это соответствует опыту без UserControls до SL1.1 / 2.0.
Кроме того, вам нужно будет ссылаться на Javascript API для Silverlight Reference в кодировке JavaScript. Веселитесь с методом FindName и / или ходите по Визуальному Дереву! Это единственные способы получить ссылки на любые визуальные объекты для манипуляции из вашего кода!
test.html
<html>
<body>
<object id="slObject" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300">
<param name="source" value="Root.xaml"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
<input type="button" onclick="sayGoodBye();" value="Say Goodbye, Silverlight!" />
<script>
function sayGoodBye() {
var slObject = document.getElementById('slObject');
var slContent = slObject.Content;
var layoutRoot = slContent.FindName('LayoutRoot');
var message = layoutRoot.FindName('Message');
message.Text = 'Goodbye';
}
</script>
</body>
</html>
Root.xaml
<Grid x:Name="LayoutRoot" Background="White"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<TextBlock x:Name="Message" Text="Hello, Silverlight!" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>