Разработка для Silverlight с использованием Javascript - возможно ли это? - PullRequest
2 голосов
/ 18 февраля 2011

Мой технический руководитель сказал мне, что можно разрабатывать приложения Silverlight исключительно с использованием Javascript. Я немного погуглил и перекусил; нравится, что это был основной метод разработки для предварительной версии Silverlight 2.0. Похоже, что с SL 2.0 он также потерял предпочтение C #.

Можно ли по-прежнему разрабатывать приложения Silverlight исключительно с использованием Javascript? Я знаю, что Silverlight и браузер имеют широкие возможности написания сценариев и могут быть написаны через JS; но могу ли я создать приложение SL с ним?

1 Ответ

5 голосов
/ 18 февраля 2011

Это все еще возможно, хотя опыт совсем другой. Вы должны загрузить исходный визуальный элемент 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...