65.9K
CodeProject 正在变化。 阅读更多。
Home

All-In-One 框架中 Silverlight 示例介绍

starIconstarIconstarIconstarIconstarIcon

5.00/5 (26投票s)

2009年12月12日

Ms-PL

5分钟阅读

viewsIcon

57267

downloadIcon

2219

本文将介绍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

© . All rights reserved.