Silverlight技术全面解析:特性、开发与应用
立即解锁
发布时间: 2025-08-26 01:21:37 阅读量: 3 订阅数: 12 


Silverlight开发实战精要
# Silverlight技术全面解析:特性、开发与应用
## 1. Silverlight概述
Silverlight是基于.NET的Flash竞争对手,它从零开始构建,深度依赖.NET和WPF,能让.NET开发者更高效地进行开发。Silverlight的发展顺应了两个趋势:一是网页不断融入更多富客户端特性;二是.NET框架拓展应用范围。
### 1.1 浏览器外执行
尽管每个Silverlight应用都需要Silverlight插件,但可将应用配置为在独立窗口中启动,类似普通桌面程序。其优势包括在桌面显示(如可在本地计算机的开始菜单添加快捷方式)和离线支持(即使无网络连接也能运行)。还能请求提升信任级别,使受信任的应用具备更多桌面应用常见的功能,如访问文档文件、自定义主窗口,甚至实现COM互操作。
### 1.2 Silverlight与WPF的关系
Silverlight借鉴了WPF用于构建丰富客户端用户界面的模型。WPF是构建丰富Windows应用的现代工具包,在.NET 3.0中推出,取代了Windows Forms。它不仅通过强大的高级功能简化开发,还通过DirectX管道渲染提高性能。
Silverlight无法完全复制WPF的功能,因为很多功能依赖操作系统的能力,包括Windows特定的显示驱动和DirectX技术。但Silverlight采用了WPF模型的子集,而非为客户端开发创建全新的控件和类集。二者的相似细节如下表所示:
|对比项|Silverlight|WPF|
| ---- | ---- | ---- |
|用户界面定义|使用XAML标记,可用相同的数据绑定语法将数据映射到显示界面|使用XAML标记,可用相同的数据绑定语法将数据映射到显示界面|
|基本控件与系统|借用许多相同的基本控件、样式系统和类似的模板机制|拥有完整的基本控件、样式系统和模板机制|
|2D图形绘制|使用形状、路径、变换、几何图形和画笔,与WPF等效|使用形状、路径、变换、几何图形和画笔|
|动画模型|基于故事板的声明式动画模型,与WPF动画系统工作方式相同|基于故事板的声明式动画模型|
|音视频播放|使用MediaElement类|使用MediaElement类|
微软打算继续从完整的WPF模型中汲取功能来扩展Silverlight的能力,未来这种趋势可能会持续。
### 1.3 Silverlight的发展历程
- **Silverlight 1**:功能相对有限,包含2D绘图功能和媒体播放支持,但没有CLR引擎,也不支持.NET语言,开发者只能用JavaScript编码。
- **Silverlight 2**:有了重大变革,增加了CLR、.NET框架类的子集以及基于WPF的用户界面模型,是微软历史上备受期待的版本之一。
- **Silverlight 3和Silverlight 4**:发展相对平稳,延续Silverlight 2的开发模型,并添加了精心挑选的功能和性能增强。Silverlight 3新增了新控件、更强大的数据绑定、更好的图形效果、导航系统和对浏览器外应用的支持。Silverlight 4的亮点功能如下:
- 基本命令支持:虽远不及WPF模型,但足以满足MVVM设计师的需求。
- 富文本框:可编辑富格式文本,更改特定选择的字体属性,甚至能包含图像和交互式控件。
- 内容加载器:可开发自定义内容加载器来扩展Silverlight的导航系统。
- 打印:添加了基于位图的打印模型,使内容打印像绘制形状一样简单。
- 摄像头和麦克风支持:增加了对捕获视频和音频输入的基本支持,但存储或传输音视频内容还需开发者自行做更多工作。
- 自动样式:可自动将样式应用于特定元素类型,使应用换肤变得轻松。
- 数据绑定优化:添加了数据绑定属性,可轻松处理空值和应用简单格式。
- 文件拖放:可将文件从桌面或Windows资源管理器拖放到Silverlight应用中。
- 提升信任级别:支持为浏览器外应用请求更高的安全权限,获得授权后可执行普通Silverlight应用无法完成的任务。
### 1.4 Silverlight 4的向后兼容性
Silverlight 4引入了一些细微变化和错误修复,可能影响应用的工作方式。但它通过怪癖模式功能避免这些差异导致问题。当Silverlight 4插件加载为早期版本编译的应用时,会自动切换到怪癖模式,尝试模拟相应Silverlight运行时环境的行为。
## 2. 开发环境与工具
### 2.1 所需工具
运行Silverlight应用只需Silverlight浏览器插件,可从http://silverlight.net 下载。创建Silverlight应用则需要Visual Studio 2010和Silverlight 4 Tools for Visual Studio 2010,可从http://go.microsoft.com/fwlink/?LinkID=177428 下载。也可使用Expression Blend 4进行创建、构建和测试,它适合图形设计师,而Visual Studio更适合代码密集型应用程序员。
### 2.2 Silverlight工具包
Silverlight工具包提供了一组扩展Silverlight功能的控件和组件,通过添加程序集引用即可在应用中使用。它不仅是实用工具包,还是将新控件引入Silverlight平台的开发过程。许多新控件先在工具包中出现,经过逐步完善后迁移到核心平台,如AutoCompleteBox、TreeView和Viewbox。
工具包将功能分为四个质量等级:
- **成熟**:包含不太可能改变的控件,通常是核心Silverlight插件已包含的控件,但工具包提供完整源代码,便于定制。
- **稳定**:包含适合大多数应用的控件,但未来可能会有细微调整和修复。如DockPanel、WrapPanel和Expander。
- **预览**:控件对大多数应用来说足够可靠,但可能会根据开发者反馈进行更改,使用新版本时可能需要修改代码。
- **实验**:包含旨在征求开发者反馈的新控件,可随意使用,但自行承担风险。
可访问http://silverlight.codeplex.com 了解不同质量等级、试用控件的实时演示或下载工具包。
### 2.3 代码示例
可在Apress网站或www.prosetech.com 下载最新的代码示例,以测试书中描述的复杂代码示例。
### 2.4 反馈
若对相关内容有意见和建议,可发送至[email protected] ,这有助于提升内容质量。
## 3. 开发流程与项目创建
### 3.1 设计工具选择
专业开发者通常使用开发工具创建Silverlight应用。图形设计师可能选择Microsoft Expression Blend 4,它具备设计视觉丰富用户界面的完整功能;开发者则倾向于使用Visual Studio 2010,它拥有全面的编码、测试和调试工具。
二者可结合使用,例如开发者用Visual Studio创建基本用户界面,然后交给设计团队用Expression Blend进行美化。许多开发者会同时安装这两个应用,在开发过程中根据需求切换。Visual Studio用于核心编程任务,Expression Blend用于增强用户界面。
Visual Studio 2010和Expression Blend 4的对比:
|工具|优点|缺点|
| ---- | ---- | ---- |
|Visual Studio 2010|具备开发Silverlight应用所需的一切,有Silverlight页面的可视化设计器,可实时预览界面|无明显缺点|
|Expression Blend 4|提供丰富的创建Silverlight用户界面的支持,视觉工具超越Visual Studio,支持SketchFlow应用原型工具,有类似Visual Studio的编码编辑器|缺乏许多高级重要的开发工具,如调试、代码重构和项目源代码控制|
### 3.2 理解Silverlight网站类型
可在Visual Studio或Expression Blend中创建两种类型的Silverlight网站:
- **普通HTML页面网站**:Silverlight应用的入口是包含Silverlight内容区域的基本HTML文件。
- **ASP.NET网站**:Visual Studio会创建两个项目,一个包含Silverlight应用文件,另一个包含将与Silverlight文件一起部署的服务器端ASP.NET网站。入口可以是普通HTML文件,也可以是包含服务器生成内容的ASP.NET网页。
ASP.NET网站在以下情况下更合适:
- 想创建同时包含ASP.NET网页和Silverlight增强页面的网站。
- 想创建调用Web服务的Silverlight应用,并同时设计和部署Web服务到同一服务器。
- 想使用专门的ASP.NET Web控件间接生成Silverlight内容。
若不需要编写服务器端代码,创建完整的ASP.NET网站意义不大。很多Silverlight应用使用基本的仅HTML网站,只有在需要特定服务器端功能时才使用ASP.NET网站。
### 3.3 向现有网站添加Silverlight内容
很多情况下,会使用Silverlight增强现有网站的内容,网站仍会包含大量HTML、CSS和JavaScript。例如,添加Silverlight内容区域展示广告、提供网站部分区域的增强体验,如玩游戏、完成调查、与产品交互或进行虚拟游览。也可创建仅Silverlight的网站,但Silverlight相对较新,安装范围不如Flash等其他网络技术广泛,且不支持Windows ME或Windows 2000等旧客户端,因此覆盖范围不如普通HTML。许多采用Silverlight的企业用它提供前沿内容以区别于竞争对手,但不会放弃传统网站。
### 3.4 创建独立Silverlight项目
创建普通HTML页面且无服务器端代码的网站是开始使用Silverlight的最简单方法,步骤如下:
1. 在Visual Studio中选择“文件” -> “新建” -> “项目”,选择“Visual Basic” -> “Silverlight”项目类型组,然后选择“Silverlight应用程序”模板。选择项目名称和硬盘位置后,点击“确定”创建项目。
2. Visual Studio会提示是否创建可运行服务器端代码的完整ASP.NET网站,取消勾选“将Silverlight应用程序托管在新网站中”选项以简化操作。
3. 选择要创建的Silverlight应用版本。若不使用Silverlight 4的新功能,选择Silverlight 3可获得更广泛的覆盖范围。若未安装Silverlight 4 Tools for Visual Studio 2010,则无法选择创建Silverlight 4应用。可在创建项目后,通过双击解决方案资源管理器中的“My Project”节点,在“目标Silverlight版本”列表中更改目标版本。
4. 点击“确定”继续创建项目。
每个Silverlight项目都有一组基本文件:
- **App.xaml和App.xaml.vb**:配置Silverlight应用,可定义应用所有页面可用的资源,对应用事件(如启动、关闭和错误条件)做出响应。新生成项目中,App.xaml.vb文件的启动代码指定应用从显示MainPage.xaml开始。
- **MainPage.xaml**:定义第一个页面的用户界面,Silverlight页面是从UserControl派生的自定义类。可通过“项目” -> “添加新项”,选择“Silverlight用户控件”模板,选择文件名并点击“添加”来添加更多页面。
- **MainPage.xaml.vb**:包含第一个页面的代码,包括响应用户操作的事件处理程序。
此外,在解决方案资源管理器中点击“显示所有文件”按钮或通过“项目” -> “显示所有文件”,可在“My Project”节点下找到AppManifest.xml文件,它列出应用使用的程序集;还有AssemblyInfo.vb文件,包含项目的相关信息,如名称、版本和发布者,这些信息在编译时嵌入Silverlight程序集中。这两个文件不应手动编辑,而是由Visual Studio在添加引用或设置项目属性时进行修改。
## 4. 深入Silverlight应用开发
### 4.1 事件处理与页面逻辑
在Silverlight应用中,事件处理是实现交互性的关键。以MainPage.xaml.vb文件为例,它包含了响应用户操作的事件处理程序。当用户与页面上的控件进行交互,如点击按钮、输入文本等,相应的事件会被触发,开发者可以在事件处理程序中编写代码来实现特定的功能。
例如,假设在MainPage.xaml中有一个按钮,我们可以在MainPage.xaml.vb中为该按钮的点击事件添加处理程序:
```vb
' MainPage.xaml.vb
Public Class MainPage
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
' 在这里编写按钮点击后的逻辑代码
MessageBox.Show("按钮被点击了!")
End Sub
End Class
```
在上述代码中,当按钮被点击时,会弹出一个消息框显示“按钮被点击了!”。这是一个简单的事件处理示例,实际开发中可以根据需求实现更复杂的逻辑。
### 4.2 数据绑定
Silverlight支持强大的数据绑定功能,允许将数据模型与用户界面元素进行绑定,实现数据的自动更新和显示。数据绑定使用XAML标记和特定的语法来实现。
例如,假设有一个简单的数据模型类:
```vb
' 数据模型类
Public Class Person
Public Property Name As String
Public Property Age As Integer
End Class
```
在MainPage.xaml中,可以将这个数据模型绑定到界面上的控件:
```xml
<!-- MainPage.xaml -->
<Grid x:Name="LayoutRoot">
<TextBlock Text="{Binding Name}" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
<TextBlock Text="{Binding Age}" HorizontalAlignment="Left" Margin="10,30,0,0" VerticalAlignment="Top"/>
</Grid>
```
在MainPage.xaml.vb中,需要设置数据上下文:
```vb
' MainPage.xaml.vb
Public Class MainPage
Public Sub New()
InitializeComponent()
Dim person As New Person()
person.Name = "张三"
person.Age = 25
' 设置数据上下文
LayoutRoot.DataContext = person
End Sub
End Class
```
在上述代码中,通过数据绑定,界面上的TextBlock控件会自动显示Person对象的Name和Age属性值。当Person对象的属性值发生变化时,界面上的显示也会相应更新。
### 4.3 导航系统
Silverlight提供了导航系统,允许在多个页面之间进行切换和导航。要实现导航功能,需要使用NavigationService类。
首先,创建多个Silverlight页面,例如Page1.xaml和Page2.xaml。然后,在MainPage.xaml中添加导航按钮:
```xml
<!-- MainPage.xaml -->
<Grid x:Name="LayoutRoot">
<Button Content="前往Page1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Click="Button_Click_1"/>
<Button Content="前往Page2" HorizontalAlignment="Left" Margin="10,40,0,0" VerticalAlignment="Top" Click="Button_Click_2"/>
<Frame x:Name="NavigationFrame" HorizontalAlignment="Left" Height="300" VerticalAlignment="Top" Width="400"/>
</Grid>
```
在MainPage.xaml.vb中,实现按钮点击事件的处理程序:
```vb
' MainPage.xaml.vb
Public Class MainPage
Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
NavigationFrame.Navigate(New Uri("/Page1.xaml", UriKind.Relative))
End Sub
Private Sub Button_Click_2(sender As Object, e As RoutedEventArgs)
NavigationFrame.Navigate(New Uri("/Page2.xaml", UriKind.Relative))
End Sub
End Class
```
在上述代码中,点击“前往Page1”按钮会导航到Page1.xaml页面,点击“前往Page2”按钮会导航到Page2.xaml页面。通过这种方式,可以实现Silverlight应用中的多页面导航。
## 5. 性能优化与安全考虑
### 5.1 性能优化
为了提高Silverlight应用的性能,可以采取以下措施:
- **减少不必要的控件和资源**:避免在页面中添加过多不必要的控件和资源,减少内存占用和加载时间。
- **优化图形和动画**:使用简单的图形和动画效果,避免复杂的渲染操作。可以使用缓存和优化的图形格式来提高性能。
- **异步加载数据**:对于需要从服务器获取数据的操作,使用异步加载方式,避免阻塞主线程,提高用户体验。
### 5.2 安全考虑
在开发Silverlight应用时,需要考虑安全问题:
- **权限管理**:合理使用提升信任级别功能,仅在必要时请求更高的安全权限,避免滥用权限导致安全风险。
- **数据验证**:对用户输入的数据进行严格验证,防止恶意输入和注入攻击。
- **网络安全**:在与服务器进行数据交互时,使用安全的网络协议,如HTTPS,确保数据传输的安全性。
## 6. 总结与展望
Silverlight作为一种基于.NET和WPF的技术,为开发者提供了强大的功能和丰富的开发体验。它具有浏览器外执行、与WPF相似的用户界面模型、不断发展的功能特性等优势。
在开发过程中,我们可以使用Visual Studio和Expression Blend等工具,结合Silverlight工具包的各种控件和组件,快速创建出高质量的应用。同时,通过合理的事件处理、数据绑定、导航系统等技术,实现应用的交互性和功能性。
然而,Silverlight也面临一些挑战,如安装范围相对较窄、不支持旧客户端等。但随着技术的不断发展,相信Silverlight会在未来不断完善和拓展其应用场景,为开发者和用户带来更多的价值。
以下是一个简单的mermaid流程图,展示了创建独立Silverlight项目的流程:
```mermaid
graph TD;
A[选择文件 -> 新建 -> 项目] --> B[选择Visual Basic -> Silverlight -> Silverlight应用程序模板];
B --> C[选择项目名称和位置,点击确定];
C --> D[取消勾选“将Silverlight应用程序托管在新网站中”];
D --> E[选择Silverlight应用版本];
E --> F[点击确定创建项目];
```
总之,Silverlight是一个值得开发者深入学习和探索的技术,通过不断实践和积累经验,可以开发出优秀的Silverlight应用。
0
0
复制全文
相关推荐









