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示例还演示了以下技术:
以下是CSSL3WriteableBitmap/VBSL3WriteableBitmap示例的屏幕截图:
需要先编写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:
在第一种场景中,需要下载标记文件,并在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项目的屏幕截图:
本地消息传递允许在单台计算机上运行的多个Silverlight插件之间创建通信通道。CSSL3LocalMessage/VBSL3LocalMessage项目展示了如何使用这个新特性。还可以从此示例中学习InkPresenter的基本用法。
要测试这个CSSL3LocalMessage/VBSL3LocalMessage示例,请在两个浏览器中打开TestPage.html。在一个应用程序上绘图,确保另一个应用程序是同步的。以下是屏幕截图:
可以通过钩子鼠标事件来实现这一点。CSSL3Input/VBSL3Input项目展示了如何做到这一点。它还展示了如何钩子键盘事件。以下是CSSL3Input/VBSL3Input示例的屏幕截图:
请参阅CSSL3HTMLBridge/VBSL3HTMLBridge项目。这个项目涵盖了:
可以快速测试它来学习上述技术。以下是CSSL3HTMLBridge/VBSL3HTMLBridge示例的屏幕截图:
要做到这一点,需要手动为控件创建一个MatrixTransform。可以在CSSL3DeepZoom/VB SL3DeepZoom中找到更多信息。
CSSL3DeepZoom/VB SL3DeepZoom项目还演示了以下技术:
以下是CSSL3DeepZoom/VB SL3DeepZoom示例的屏幕截图:
如果属性需要支持动画,必须使用Dependency Property。大多数内置控件在它们的属性被动画化时没有公开的事件。如果需要在属性被动画化时收到通知,可以编写一个从内置控件派生的自定义控件。有关更多详细信息,请参阅CSSL3Animation/VBSL3Animation项目。(如果是自定义控件的新手,建议先查看CSSL3CustomControl/VBSL3CustomControl。它将帮助学习如何快速为Silverlight应用程序创建自定义控件。)
CSSL3Animation/VBSL3Animation项目还演示了其他关于动画的技术: