Silverlight开发框架指南

Silverlight是一个由微软开发的富互联网应用程序(RIA)技术,它允许开发者创建具有丰富用户界面和交互性的Web应用程序。对于刚接触Silverlight的开发者来说,一个全面的开发框架是非常有用的,因为它提供了直接的示例,帮助开发者快速上手。本文将介绍如何使用Silverlight开发框架中的一些关键功能。

微软的All-In-One代码框架通过典型的示例代码展示了三种流行的编程语言(Visual C#、VB.NET、Visual C++)中的微软开发技术框架和骨架。每个示例都是精心挑选、编写和记录的,以展示一个经常被询问、测试或使用的编码场景。

如何使用代码

Silverlight3中,如何捕获屏幕截图?目前,只能使用WriteableBitmap来创建一个UIElement的屏幕截图,方法是将UIElement传递给WriteableBitmap的构造函数:

C#
WriteableBitmap bmp = new WriteableBitmap(uiElementSource, uiElementSource.RenderTransform);

CSSL3WriteableBitmap/VBSL3WriteableBitmap示例还演示了以下技术:

  • 如何将源图像缩放到特定分辨率(例如800 * 600)
  • 如何修改单个像素
  • 如何在Silverlight中实现种子填充算法

以下是CSSL3WriteableBitmap/VBSL3WriteableBitmap示例的屏幕截图:

如何编写自定义ShaderEffect

需要先编写HLSL(高级着色语言)代码,并将其编译为.ps文件。然后,可以使用.ps文件作为自定义ShaderEffect类的PixelShader的源。还可以在自定义ShaderEffect类中添加一个DependencyProperty:

C#
public static readonly DependencyProperty AmplitudeProperty = DependencyProperty.Register("Amplitude", typeof(double), typeof(CycleWateryEffect), new PropertyMetadata(0.1, ShaderEffect.PixelShaderConstantCallback(1)));

可以使用上述DependencyProperty将参数从Silverlight传递到HLSL。CSSL3PixelShader/VBSL3PixelShader项目是一个分步示例,展示了如何在Silverlight 3中创建自定义ShaderEffect类并使用它。以下是CSSL3PixelShader/VBSL3PixelShader示例的屏幕截图:

如何使用MediaElement.Markers

通常有两种场景可以使用MediaElement.Markers:

  • 有一个文件(通常是XML格式)包含媒体自定义标记
  • 媒体文件本身包含嵌入的标记

在第一种场景中,需要下载标记文件,并在MyMediaElement.MediaOpened事件中手动创建并添加标记到MediaElement.Markers。在代码中添加标记,可以使用以下代码:

C#
// 通过代码添加标记
this.MyMediaElement.Markers.Add(new TimelineMarker() { Text = "This marker is added by code!", Time = TimeSpan.FromSeconds(8), Type = "MyMarker" });

对于第二种场景,MediaElement.Markers将自动填充。一旦MediaElement.Markers中有标记,当达到一个标记时,MyMediaElement.MarkerReached事件将触发。然后可以在MyMediaElement.MarkerReached事件处理程序中处理自己的代码逻辑。

有关更多详细信息,请参阅CSSL3MediaElement/VBSL3MediaElement项目。以下是CSSL3MediaElement/VBSL3MediaElement项目的屏幕截图:

什么是LocalMessage

本地消息传递允许在单台计算机上运行的多个Silverlight插件之间创建通信通道。CSSL3LocalMessage/VBSL3LocalMessage项目展示了如何使用这个新特性。还可以从此示例中学习InkPresenter的基本用法。

要测试这个CSSL3LocalMessage/VBSL3LocalMessage示例,请在两个浏览器中打开TestPage.html。在一个应用程序上绘图,确保另一个应用程序是同步的。以下是屏幕截图:

如何实现控件的拖放效果

可以通过钩子鼠标事件来实现这一点。CSSL3Input/VBSL3Input项目展示了如何做到这一点。它还展示了如何钩子键盘事件。以下是CSSL3Input/VBSL3Input示例的屏幕截图:

如何在JavaScript和Silverlight之间进行互操作

请参阅CSSL3HTMLBridge/VBSL3HTMLBridge项目。这个项目涵盖了:

  • 如何从托管代码调用JavaScript方法
  • 如何从托管代码处理HTML事件
  • 如何从JavaScript调用托管代码方法
  • 如何从JavaScript处理托管代码事件

可以快速测试它来学习上述技术。以下是CSSL3HTMLBridge/VBSL3HTMLBridge示例的屏幕截图:

如何让控件悬停在MultiScaleImage上并与MultiScaleImage的子图像同步

要做到这一点,需要手动为控件创建一个MatrixTransform。可以在CSSL3DeepZoom/VB SL3DeepZoom中找到更多信息。

CSSL3DeepZoom/VB SL3DeepZoom项目还演示了以下技术:

  • 如何使用Deep Zoom Composer生成深度缩放内容
  • 如何下载和使用元数据
  • 在集合中对子图像进行命中测试
  • 如何在集合中移动子图像
  • 如何使用DeepZoomTools.dll的帮助以编程方式生成深度缩放内容

以下是CSSL3DeepZoom/VB SL3DeepZoom示例的屏幕截图:

为什么属性无法动画化,以及如何在属性动画化时获得通知

如果属性需要支持动画,必须使用Dependency Property。大多数内置控件在它们的属性被动画化时没有公开的事件。如果需要在属性被动画化时收到通知,可以编写一个从内置控件派生的自定义控件。有关更多详细信息,请参阅CSSL3Animation/VBSL3Animation项目。(如果是自定义控件的新手,建议先查看CSSL3CustomControl/VBSL3CustomControl。它将帮助学习如何快速为Silverlight应用程序创建自定义控件。)

CSSL3Animation/VBSL3Animation项目还演示了其他关于动画的技术:

  • 基本点动画
  • 自定义缓动
  • 如何在代码后创建Storyboard
  • 如何创建基于KeyFrames的动画
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485