使用Javascript开发Silverlight - 这可能吗?

Fra*_*rio 2 javascript silverlight silverlight-4.0

我的技术负责人告诉我,可以用Javascript开发Silverlight应用程序.我做了一些谷歌搜索和binging; 它喜欢这是开发Silverlight 2.0之前的主要开发方法.从SL 2.0开始,它似乎也不再受C#的青睐.

是否仍然可以使用Javascript开发Silverlight应用程序?我知道Silverlight和浏览器具有广泛的脚本功能,可以通过JS编写脚本; 但是我可以用它构建一个SL应用程序吗?

Tim*_*son 5

尽管经验非常不同,但仍有可能.您必须通过引用服务器上的XAML文件的Silverlight对象上的源属性加载初始Root可视元素,但之后您可以通过javascript完全访问可视树.

如果将下面的Test.html和Root.xaml文件放在同一个文件夹中,它们将生成一个可测试的页面.

请注意与"标准"(即*.xap源)方案的差异 - SL对象标记上的"source"参数设置为.XAML文件而不是.XAP文件..XAML文件也与VS中的默认SL应用程序不同:根元素中缺少x:Class ="MyApp.MainPage",根元素是Grid(或任何Visual元素)而不是UserControl元素.这是因为没有应用程序(至少没有从.XAP加载 - 我假设SL控件实际上在加载Root.XAML文件的过程中创建了一个默认的应用程序实例),而没有UserControl,因为没有代码隐藏.这与没有UserControls的Pre-SL1.1/2.0体验一致.

此外,您需要在javascript编码中引用Silverlight Reference的Javascript API.享受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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)