All-In-One 框架中 Silverlight 示例介绍
本文将介绍All-In-One Framework中的几个Silverlight示例。
引言
本文介绍了All-In-One Framework中的八个Silverlight示例。如果您是Silverlight新手,并且需要简单明了的示例来快速入门,那么本文将特别有用。
这只是All-In-One Framework中Silverlight示例的一部分。您可以从http://cfx.codeplex.com/获取更多示例。
背景
Microsoft All-In-One Code Framework通过三种流行编程语言(Visual C#、VB.NET、Visual C++)中的典型示例代码,阐述了Microsoft开发技术的框架和骨架。每个示例都经过精心挑选、组织和文档化,以展示一个经常被问到、测试过或使用过的编码场景。
使用代码
如何在Silverlight 3中捕获屏幕截图?
目前,您只能使用WriteableBitmap
通过将UIElement
传递给WriteableBitmap
的构造函数来创建UIElement
的屏幕截图。
WriteableBitmap bmp = new WriteableBitmap(uiElementSource,
uiElementSource.RenderTransform);
CSSL3WriteableBitmap/VBSL3WriteableBitmap示例还演示了以下技术:
- 如何将源图像缩放到特定分辨率(此处为800 * 600)
- 如何修改单个像素
- 如何在Silverlight
WriteableBitmap
中实现种子填充算法
以下是CSSL3WriteableBitmap/VBSL3WriteableBitmap示例的屏幕截图。
如何编写自定义ShaderEffect?
您需要先编写HLSL(High Level Shader Language)代码并将其编译为.ps文件。然后,您可以将.ps文件用作自定义ShaderEffect
类的PixelShader的源。您也可以在自定义ShaderEffect
类中添加DependencyProperty。
public static readonly DependencyProperty AmplitudeProperty =
DependencyProperty.Register("Amplitude", typeof(double),
typeof(CycleWateryEffect),
new PropertyMetadata(0.1, ShaderEffect.PixelShaderConstantCallback(1)));
我们可以使用上述DependencyProperty将参数从Silverlight传递到HLSL。
CSSL3PixelShader/ VBSL3PixelShader项目是一个分步示例,演示了如何创建自定义ShaderEffect
类并在Silverlight 3中使用它。以下是CSSL3PixelShader/ VBSL3PixelShader示例的屏幕截图。
如何使用MediaElement.Markers?
通常,MediaElement.Markers
可以在两种场景中使用:
- 有一个文件(通常是XML格式),其中包含媒体的自定义标记。
- 媒体文件本身嵌入了标记。
在第一种场景中,您需要下载标记文件,并在MyMediaElement.MediaOpened
事件中手动创建并添加标记到MediaElement.Markers
。要以代码添加标记,可以使用以下代码:
// Add a marker by code
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调用托管代码,反之亦然?
请参考CSSL3HTMLBridge/VBSL3HTMLBridge项目。该项目涵盖了:
- 如何从托管代码调用JavaScript方法
- 如何从托管代码处理HTML事件
- 如何从JavaScript调用托管代码方法
- 如何从JavaScript处理托管代码事件
您可以快速测试它来学习上述技术。以下是CSSL3HTMLBridge/VBSL3HTMLBridge示例的屏幕截图。
如何让一个控件悬停在MultiScaleImage上,并将其与MultiScaleImage的SubImages同步?
为此,我们需要手动创建一个控件的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
- 如何创建基于关键帧的动画
以下是CSSL3Animation/VBSL3Animation示例的屏幕截图。
关注点
如果遇到任何问题,可以查看每个示例项目中的ReadMe.txt文件,其中包含有关如何生成项目的分步教程。
如果您想获取更多示例,请访问此链接:Microsoft All-In-One Code Framework。