微软Silverlight浏览器插件使得开发者能够运行富因特网程序(RIAs)——包括动画,矢量图形和视频回放等等。看看如何进行Silverlight开发,并且感受一下这种新的开发方式吧。本文代码下载:http://assets.devx.com/sourcecode/20341.zip

  经过多年发展,我们看到了Web应用程序的繁荣。早期的Web站点仅仅支持静态的HTML页面,图片和文字信息。然后,服务器端技术如CGI,ASP和JSP等使得Web硬哟程序变成了现实,用户突然可以在Web上做很多事情了,比如在线购买商品,预订等等。客户端技术如Javascript等帮助提高了用户的Web应用体验,使得它们更加具备响应性。尽管AJAX的相关技术已经成熟很多年了,但也就是在最近几年人们才开始花费大量时间开发AJAX的Web应用程序。所有这一切都是为了同一个目标——使得Web应用程序交互性和响应能力更强。

  今天,又出现了一个新名词——RIA,是Rich Internet Applications的缩写。对于微软来说,RIA实际代表着Rich Interactive Applications。微软最近启动了一个相关的技术/产品名为Silverlight。原名为Windows Presentation Foundation/Everywhere(WPF/E)的Silverlight是一个浏览器插件,能够使得开发者创建RIA程序包括动画,矢量图形和视频回放等等。

  这篇文章帮助你了解Silverlight的开发,希望给你一个很好的关于Silverlight开发的讲解。

  Silverlight现状

  目前,有两个版本的Silverlight:1.0(发布版)和1.1(alpha发布),主要的区别在于是否支持.NET语言1.1版本。对于1.0版本,你必须使用Javascript来写你的程序逻辑。在1.1版本里,你可以使用C#或者VB进行程序逻辑开发,通过CLR来运行。

  Silverlight运行时目前支持下列浏览器:

  • Internet Explorer 6/7

  • Firefox 1.5/2.0

  • Safari 2.0

  本文着重讲解Silverlight1.1的内容。

  获取开发工具

  为了开发Silverlight应用程序,你必须获得以下运行时/工具:

  运行时:

  为了在浏览器里查看Silverlight应用程序,下载如下内容:

  Microsoft Silverlight 1.0 Release Candidate

  • Mac

  • Windows

  • Microsoft Silverlight 1.1 Alpha Refresh

  • Mac

  • Windows

  • Microsoft ASP.NET Futures (July 2007)

  ASP.NET Futures下载包含了用于支持Silverlight程序的最新ASP.NET控件。

  开发工具:

  最简单的进行Silverlight开发的工具是Visual Studio 2008,当前下载版本是Beta 2。你可以从http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx下载。

  当你下载并安装了VS2008Beta2之后,下载Microsoft Silverlight Tools Alpha Refresh for Visual Studio (July 2007),这是一个用来创建Silverlight程序的VS2008增强包。安装它会为VS2008Beta2增加如下特性:

  1.    VB和C#工程模板
  2.    IntelliSense和XAML代码生成器
  3.    Silverlight程序的调试
  4.    Web引用支持
  5.    和Expression Blend的集成

  另外,你还需要如下专业工具来进行Silverlight开发:

  • Expression Blend 2 August Preview: 专业级Silverlight用户交互开发工具

  • Expression Media Encoder Preview Update: Microsoft Expression Media的特性之一,允许你创建和增强视频

  • Expression Design: 用来创建Silverlight程序的专业插图和绘图设计工具。

  最后,你需要下载下列包含文档和例程代码的SDK :

  • Microsoft Silverlight 1.0 Software Development Kit Release Candidate

  • Microsoft Silverlight 1.1 Software Development Kit Alpha Refresh

  开始编程

  当安装好上述工具之后,你可以创建你的第一个Silverlight程序了。打开VS2008,创建一个新工程。工程类型选择Silverlight,选择Silverlight工程模板:如图1所示。将工程命名为OurFirstSilverlightProject。


 在Solution Explorer中,点击Show All Files按钮来查看所有VS自动生成的代码。图2显示了所有文件。

图2

  下面一节包含了该Silverlight工程里的基本文件的讲解:

  TestPage.html

  这是一个测试页,用来测试Silverlight程序。它包含了Silverlight控件并引用了两个JavaScript文件:Silverlight.js和TestPage.html.js。下面是Testpage.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" >
<!-- saved from url=(0014)about:internet -->
<head>
    <title>Silverlight Project Test Page </title>
    
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript" src="TestPage.html.js"></script>
    <style type="text/css">
        .silverlightHost { width: 640px; height: 480px; }
    </style>
</head>

<body>
    <div id="SilverlightControlHost" class="silverlightHost" >
        <script type="text/javascript">
            createSilverlight();
        </script>
    </div>
</body>
</html>

  包含Siverlight控件的HTML页面页可以包含通常的HTML元素来构成一个web页面。当你双击Solution Explorer中的Testpage.html,VS2008将会在一个分离视图里展示页面,这是VS2008的新特性。使用分离视图,你可以在浏览HTML代码时同时预览它在浏览器中的效果。如图3.

图3

  TestPage.html.js

  这个文件包含了一个Javascript函数,装载Silverlight控件到web页上。它也引用了一个包含Silverlight程序的用户界面定义的XAML文件。

以下是引用片段:
  // JScript source code
  //contains calls to silverlight.js, example below loads Page.xaml
  function createSilverlight()
  {
  Silverlight.createObjectEx({
  source: "Page.xaml",
  parentElement: document.getElementById("SilverlightControlHost"),
  id: "SilverlightControl",
  properties: {
  width: "100%",
  height: "100%",
  version: "1.1",
  enableHtmlAccess: "true"
  },
  events: {}
  });
  // Give the keyboard focus to the Silverlight control by default
  document.body.onload = function() {
  var silverlightControl = document.getElementById('SilverlightControl');
  if (silverlightControl)
  silverlightControl.focus();
  }
  }

每个HTML页面应该有一个相应的Javascript(.js)文件来装载一个相关的XAML文件中的Silverlight控件。

  Page.xaml

  这个文件包含了你的Silverlight应用程序的用户界面。下面列出了VS2008创建的缺省内容

以下是引用片段:
<Canvas
        xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="parentCanvas"
        Loaded="Page_Loaded"
        x:Class="OurFirstSilverlightProject.Page;assembly=ClientBin/
OurFirstSilverlightProject.dll"
        Width="640"
        Height="480"
        Background="White"
        >
</Canvas>

  注意这里x:Class属性。它指定了目前类名为OurFirstSilverlightProject.Page(OurFirstSilverlightProject是工程的缺省根命名空间而Page是类名),它对应的程序集在ClientBin/OurFirstSilverlightProject.dll.。

  VS2008提供了支持XAML内容的IntelliSense,当你手写XAML时是一个很不错的辅助。

  Page.xaml.vb

  这个文件包含了Silverlight应用程序的被管理的代码。缺省的VS产生的类名是Page。

以下是引用片段:
  Partial Public Class Page
  Inherits Canvas
  Public Sub Page_Loaded(ByVal o As Object, ByVal e As EventArgs)
  ' Required to initialize variables
  InitializeComponent()
  End Sub
  End Class

  Page.xaml.vb文件是你写你的被管理的代码的地方。当准备部署Silverlight应用程序时,只有被编译过的程序集需要被部署。不需要部署源代码。

  Silverlight.js

  这是微软提供的创建所有的必要的部分用来确保目标浏览器可以运行Silverlight程序。通过将此文件包含在你的应用程序中,目标Web浏览器将会在未安装Silverlight运行时的情况下要求安装必须的运行时(每个Silverlight程序必须包含这个文件)。在使用许可的规定下,你不得修改这个文件。在运行多个Silverlight程序的Web服务器上,你可以只放置一个该文件的拷贝,并且将所有包含Silverlight内容的页面指向这个页面。

  使用XAML创建用户界面

  VS2008具备支持XAML内容的IntelliSense。这使得界面开发更有效率了,但是当前这里所用的VS2008版本没有一个XAML内容的查看器。这就是说,每次开发时必须运行一遍来查看其内容。

  好消息是你可以使用微软的另外一个工具——Expression Blend来创建XAML界面。微软Expression Blend是一个专业级的设计工具,用来为Windows程序设计专业级的用户界面。最新的Blend版本,Expression Blend 2 August Preview,允许你创建基于Silverlight的程序。

  使用Expression Blend2打开Page.xml,右击选择Open in Expression Blend…图4所示

图4

  Expression Blend2将会启动,你可以看到一个类似VS的界面。图5.

图5

  现在我们为这个页面增加一写控件。首先,创建一个圆角按钮,如图6所示。有了这个按钮,你可以在上面增加一些文字描述信息。

图6
首先,点击Canvas控件(如图7)并且将其增加到页面上。Canvas将会作为容器来包含所有组成这个按钮的控件。

图7

  为了创建按钮的边框,增加一个Rectangle控件到页面上,覆盖你刚才增加的canvas。图8

图8

  为了创建四个圆形边角,点击Direction Selection图标并且选择你刚增加的Rectangle控件。如图9所示,设置Rectangle的属性如下:

  • RadiusX - 8

  • RadiusY - 8

  • StrokeThickness - 3

图9

  另外,你也可以设置背景为黄色,如图9所示。

  为了显示按钮中的文字,你需要增加一个TextBlock控件到canvas上,如图10.同时,设置字体为Comic Sans MS。

图10
为了使得按钮显示当前时间,你需要每秒刷新一下时间。增加一个Timeline到你的XAML文件中。点击Objects和Timeline组中的>箭头,按照+按钮的指示。图11所示。

图11

  你会被要求命名新的Timeline。使用缺省的名称Timeline1点击OK。

  你的XAML文件现在看起来像图12所示。保存XAML文件。

图12

  当你转回到VS2008时,它会询问你是否重新载入Page.xml因为它在编辑器以外被修改了。当你重新载入之后,XAML内容如下:

以下是引用片段:
<Canvas
        xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="parentCanvas"
        Loaded="Page_Loaded"
        x:Class="OurFirstSilverlightProject.Page;assembly=ClientBin/
OurFirstSilverlightProject.dll"
        Width="640"
        Height="480"
        Background="White"
        >
    <Canvas.Triggers>
        <EventTrigger RoutedEvent="Canvas.Loaded">
            <BeginStoryboard>
                <Storyboard x:Name="Timeline1"/>
            </BeginStoryboard>
        </EventTrigger>
    </Canvas.Triggers>
  
    <Canvas Width="189" Height="44" Canvas.Left="8" Canvas.Top="8">
        <Rectangle Width="189" Height="44" Fill="#FFF4FB04" 
               Stroke="#FF000000" StrokeThickness="3" RadiusX="8" 
               RadiusY="8"/>
        <TextBlock Width="168" Height="23" Canvas.Left="10" 
               Canvas.Top="11" Text="TextBlock" TextWrapping="Wrap" 
               FontFamily="Comic Sans MS"/>
    </Canvas>
</Canvas>

  如图13所示。

图13
为了使得canvas对象可以通过编程访问,增加x:Name属性,并设置位btnTime,像这样:

以下是引用片段:
<Canvas x:Name="btnTime" Width="189" Height="44" 
          Canvas.Left="8" Canvas.Top="8">

  注意在Expression Blend2中,你可以切换Design和XAML视图(如图13)。不幸的是,目前XAML视图中不支持IntelliSense。

  使用VB构建程序逻辑

  在用户界面完成以后,现在做些有用的代码——比如,在按钮中显示当前时间。

  在Solution Explorse中双击Page.xaml.vb文件,在代码编辑器中载入它。

  在Page_Loaded()小段中,增加如下行:

以下是引用片段:
  Partial Public Class Page
  Inherits Canvas
  Public Sub Page_Loaded(ByVal o As Object, ByVal e As EventArgs)
  ' Required to initialize variables
  InitializeComponent()
  Me.Timeline1.Duration = New Duration(New TimeSpan(0, 0, 1))
  Me.Timeline1.Begin()
  End Sub

  在代码中,Timeline1每秒触发一个事件(Completed事件),通过Duration对象设置。Timeline对象和Windows程序员熟悉的Timer控件很类似。Begin()方法开始倒计时,一秒后Completed事件触发。

  下一步是在Completed事件完成后干什么,你可以在代码编辑器里选择Timeline1对象,然后选择Completed事件,如图14.

图14

  编写如下Completed事件代码:

以下是引用片段:
  Private Sub Timeline1_Completed( _
  ByVal sender As Object, _
  ByVal e As System.EventArgs) _
  Handles Timeline1.Completed
  Dim textBlk As TextBlock = Me.btnTime.Children(1)
  textBlk.Text = Now.ToString
  Me.Timeline1.Begin()
  End Sub
  End Class

  基本的,你通过获取嵌入在canvas(btnTime)中的TextBlock控件来设置当前时间及其Text属性。Canvas有两个孩子:

  • Children(0): Rectangle control

  • Children(1): TextBlock control

  在显示时间后,你呼叫Begin()方法来开始重新倒计时。

  好,完成了!在VS2008中按下F5,你将看到IE中显示当前的Silverlight程序。如果你在Firefox浏览器中调用,效果也是一样的。如图15.按钮每秒更新一次时间。

图15

  变化

  现在你有第一个Silverlight程序运行着了,试着做一些动画吧。作为例子,让我们来修改它,使其旋转和更新时间。
使用相同的工程,在Expression Blend2 中增加一个新的Timeline到XAML文件中。在增加了新的Timeline之后,你的XAML代码看起来是这样的:

以下是引用片段:
Partial Public Class Page
    Inherits Canvas

Public Sub Page_Loaded(ByVal o As Object, ByVal e As EventArgs)
        ' Required to initialize variables
        InitializeComponent()

Me.Timeline1.Duration = New Duration(New TimeSpan(0, 0, 1))
        Me.Timeline1.Begin()

End Sub

  在Page.xaml.vb文件里,声明一个名为degrees的私有成员变量:

以下是引用片段:
  Partial Public Class Page
  Inherits Canvas
  Private degrees As Integer = 0

  在Page_Loaded()子程序里,为第二个Timeline增加一个新的duration:

以下是引用片段:
  Public Sub Page_Loaded(ByVal o As Object, ByVal e As EventArgs)
  ' Required to initialize variables
  InitializeComponent()
  '---display the clock---
  Me.Timeline1.Duration = New Duration(New TimeSpan(0, 0, 1))
  Me.Timeline1.Begin()
  '---rotate the clock---
  Me.Timeline2.Duration = New Duration(New TimeSpan(100))
  Me.Timeline2.Begin()
  End Sub

  这里,你设置了Timeline2的间隔为100毫秒(重载了TimeSpan对象构造器)。每100毫秒,Timeline2的Completed事件触发,这里你调用PerformTransformation()子程序:

以下是引用片段:
  Private Sub Timeline2_Completed( _
  ByVal sender As Object, _
  ByVal e As System.EventArgs) _
  Handles Timeline2.Completed
  PerformTransformation()
  Me.Timeline2.Begin()
  End Sub

  子程序使用RotateTransform对象来完成一个对象的变化。这里你使用它来在每个时刻旋转按钮1度。

以下是引用片段:
  Private Sub PerformTransformation()
  '---use a RotateTransform object to perform transformation---
  Dim rt As New RotateTransform
  '---define the transformation---
  With rt
  .Angle = degrees
  .CenterX = 50
  .CenterY = 50
  End With
  '---increment the degree of rotation---
  degrees += 1
  '---transform the button---
  btnTime.RenderTransform = rt
  End Sub

  另外,当用户点击按钮时,按钮将会回到原来的位置,并且重新开始旋转:

以下是引用片段:
  Private Sub btnTime_MouseLeftButtonDown( _
  ByVal sender As Object, _
  ByVal e As System.Windows.Input.MouseEventArgs) _
  Handles btnTime.MouseLeftButtonDown
  degrees = 0
  PerformTransformation()
  End Sub

  图16显示了按钮旋转的效果图。

图16

 部署Silverlight程序

  当你的Silverlight程序完成之后,部署它就很容易了。对于一个产品环境,没有必要暴露你的被管理的代码的源代码。只要拷贝编译过的程序集到你的web服务器上即可。比如你可以拷贝你刚刚创建的程序集来看看这个过程有多简单。

  首先,创建一个目录,如:C:/MyFirstSilverlightApp。

  创建一个HTML页面Default.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" >
<!-- saved from url=(0014)about:internet -->
<head>
    <title>Silverlight Project Test Page </title>
    
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript" src="Default.html.js"></script>
    <style type="text/css">
        .silverlightHost { width: 640px; height: 480px; }
    </style>
</head>

<body>
    <div id="SilverlightControlHost" class="silverlightHost" >
        <script type="text/javascript">
            createSilverlight();
        </script>
    </div>
</body>
</html>

  就像你看到的那样,你可以轻松的从TestPage.html中拷贝内容并将它粘贴到Default.html中。重要的部分用粗体标明了。

  这个HTML文件引用了两个Javascript文件:Silverlight.js和Default.html.js。和刚才一样,你可以从VS2008的工程中拷贝过来并且改名。

  缺省的,Default.html.js使用Page.xaml作为用户界面。这里,从VS2008工程中拷贝Page.xaml到C:/MyFirstSilverlightApp文件夹。

  如果你查看Page.xaml,你将看到Silverlight程序被期望用来在ClientBin目录下发现编译程序集。编译的Dll名为OurFirstSilverlightProject.dll:

以下是引用片段:
<Canvas
        xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="parentCanvas"
        Loaded="Page_Loaded"
        x:Class="OurFirstSilverlightProject.Page;
assembly=ClientBin/OurFirstSilverlightProject.dll"
        Width="640"
        Height="480"
        Background="White"
        &gtl
...

  因此,在C:/MyFirstSilverlightApp,创建一个新的目录ClientBin,从VS2008的工程目录的ClientBin目录下拷贝编译后的Dll文件。

  图17显示了C:/MyFirstSilverlightApp目录。就像你看到的一样,你无须部署你的VB程序代码,只是程序集。

图17

  现在你可以配置C:/MyFirstSilverlightApp作为IIS的一个虚拟目录了。启动IIS(你可以使用inetmgr命令),右击Default Web Site链接,选择New | Virtual Directory…给它一个Silverlight的别名,指定C:/MyFirstSilverlightApp作为目录所在地。好的,完成了!

  你可以使用URL来访问这个页面了:http://localhost/Silverlight/default.html.

  你已经看到了使用VS2008创建Silverlight应用程序的过程。你使用XAML来定义Silverlight程序的用户界面,你可以使用VS2008,Expression Blend2或手写的方式来完成它。希望你从本文得到了灵感去深入了解Silverlight。

精彩推荐

绚丽新体验 Silverlight开发指南

用Visual Studio 2008进行Silverlight开发相关推荐

  1. Visual Studio 2008带来了什么

    .Net可能是我最不熟悉的一个开发领域了,没想到因缘际会,要从这个领域开始写我开发技术方面的首篇博文.最近接触了一些软件项目,发现微软开发平台的快速构建能力,非常适合这些项目的需要,而且.Net环境目 ...

  2. Visual Studio 2008 SDK 1.1

    微软刚刚发布了Visual Studio 2008 SDK Version 1.1 的下载. 提供各种工具.文档.示例,以便用户为Visual Studio 2008设计.开发.测试和部署扩展,并在V ...

  3. Visual Studio 2008 SDK Version 和Microsoft Visual Studio 2008 Shell发布了

    继Visual Studio 2008 RTM 不久后,微软提供了Visual Studio 2008 SDK Version 1.0的下载.提供各种工具.文档.示例,以便用户为Visual Stud ...

  4. 第五篇:Visual Studio 2008 Web开发使用的新特性

    第五篇:Visual Studio 2008 Web开发使用的新特性 本篇翻译自MSDN. .NET Framwork 3.5与Visual Studio 2008 包含很多新特性.AJAX的Web开 ...

  5. Visual Studio 2008 可扩展性开发(九):总结篇

    可以说木匠让小时的我第一次感受到了专业,虽然那时还不知道专业这个词,尤其是那些有年纪的老木匠,专注地在那锯木头.钉钉子.刨出带着香味的木花.他们有其他人所没有的工具,更重要的是他们掌握了那些工具.VS ...

  6. Visual Studio 2008 可扩展性开发(三):Add-In运行机制解析(下)

    前言 在上篇Add-In运行机制解析(上)中,我分析了Add-In向导生成的代码,从中我们知道只要创建一个类库,它包含实现了IDTExtensibility2接口的类,然后为其建立.addin配置文件 ...

  7. [Ray Linn]用Visual Studio 2008开发IE BHO (浏览器帮助对象)之一

    这篇文章是应同学们的要求写的,以前都是用VC++ 6.0+Platform SDK完成的. 迁移到 VS2008之后,原来Visual Studio 6.0里的BHO向导不复存在,因此特此不厌其烦,详 ...

  8. Oracle推出支援.NET 3.5与Visual Studio 2008的开发工具

    Oracle推出支援.NET 3.5与Visual Studio 2008的开发工具 转载于:https://www.cnblogs.com/Ken-Cai/archive/2008/04/06/11 ...

  9. Visual C# 2008+SQL Server 2005 数据库与网络开发-- 1.1 Visual Studio 2008概述

    本节首先介绍了.NET的开发环境和安装配置,重点介绍了Visual Studio 2008新增的主要控件和MSDN. 转载于:https://www.cnblogs.com/008aspnet/arc ...

最新文章

  1. phpstudy安装imagick扩展库怎么装
  2. Oracle PL/SQL小练习
  3. Bootstrap CustomBox 弹层
  4. JQuery源码解析(一)
  5. JAVA Spring 事物 ( 已转账为例 ) 基于 AOP 注解
  6. 基于最简单的FFmpeg包封过程:视频和音频分配器启动(demuxer-simple)
  7. python sendline,python pexpect sendcontrol关键字符
  8. 畅谈云原生(上):云原生应用应该是什么样子?
  9. 机器学习与数据挖掘_Regularization
  10. 最详细的JavaScript高级教程(十一)正则表达式
  11. matlab无限长一维原子链,优·王淑华固体物理答案第三章.ppt
  12. UDP丢包替代:用PCAP实现C/C++以太网SDR吞吐
  13. 让0球平局怎么算_古迪逊公园默郡德比,平局德比丨第30轮
  14. brain segmentation调研--Brain Parcellation as a Pretext Tas
  15. jquery.countdown.js一个时间倒计时的插件
  16. 家庭装修是找设计师和施工队好,还是找装修公司好呀
  17. Centos7自动挂载Windows中的NTFS 分区
  18. ruoyi数据权限设置
  19. Macbook Pro开机黑屏如何自查问题
  20. 计算多列迭代次数的一种平均列近似方法

热门文章

  1. 360,手机助手的功能,既然有如此完美?
  2. 实体对象集合中根据实体对象的某一属性进行大小排序
  3. mac vi快速删除_Mac OS X下应该如何卸载软件及mac终端命令大全(转)
  4. QQ数据库管理-----mysql
  5. IBM: 告别1.0迎接2.0,企业咨询进入技术驱动新时代
  6. 自然语言处理——中英文分词
  7. 梅州医院检验科建设标准:设计规范
  8. UWA Pipeline 功能详解|可视化配置自动测试
  9. 基于Android实现的OA办公自动化系统
  10. python autocad显示_通过Python打开Autocad的新实例