以编程方式呈现silverlight控件的图像并将其保存到磁盘

时间:2011-10-19 05:53:55

标签: silverlight image render

我的asp.net网站有一个silverlight应用程序。

对于没有silverlight的客户,我想提供备用内容。

备用内容应包含silverlight控件的静态图像。

服务器端,我想以编程方式呈现silverlight控件的图像并将其保存到磁盘。如何才能做到这一点?

以下是可能进入Page_Load方法的示例代码:

if (!clientHasSilverlight()) {
    hideSilverLightObject();
    CustomSilverLightControl customSilverLightControl = new CustomSilverLightControl();
    customSilverLightControl.setProperties(properties);
    string fileName = renderControlAndSaveToTempFile(customSilverLightControl);
    Literal l = new Literal();
    l.Text = @"<img src=""" + fileName + @""" />";
    Page.Controls.Add(l);
}

如果不这样做,我怎样才能创建一个可以由silverlight应用程序使用的控件(在单独的程序集中),但是服务器端代码也可以使用它来实现此目的?

2 个答案:

答案 0 :(得分:0)

无法在ASP.NET应用程序中运行Silverlight,因此上面的代码草图中没有CustomSilverLightControl。您可以期望的最好的方法是在子进程中运行Silverlight,但这很可能会很慢并且会导致资源的大量消耗。

Silverlight应用程序可以截取自己的截图,这并不难做到。但是,从Silverlight获取屏幕截图更难,因为Silverlight在浏览器插件中运行。您还必须修改Silverlight应用程序以支持此屏幕截图功能,并能够将其隐藏在普通用户之外。

我担心修改您的Silverlight应用程序以支持此屏幕截图拍摄行为,并设置启动Silverlight应用程序所需的方法,让它自己截取屏幕截图,然后付出很多努力将屏幕截图发送回您的Web应用程序。鉴于这种方法会产生不可避免的性能问题,老实说,我认为这种努力不值得。

答案 1 :(得分:0)

您无需在Page_Load上执行此操作。

在您的HTML / ASPX中,您将拥有以下内容:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <param name="source" value="ClientBin/SilverlightApplication1.xap"/>
    <param name="onerror" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="4.0.50826.0" />
    <param name="autoUpgrade" value="true" />
    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration: none;">
        <img src="http://go.microsoft.com/fwlink/?LinkID=161376" alt="Get Microsoft Silverlight" style="border-style: none"/>
    </a>
</object>

相关位是当Silverlight不存在时使用的<a href...,允许用户去安装插件。

默认情况下,这会在http://go.microsoft.com/fwlink/?LinkID=161376显示图片:

Install Silverlight image

将您从运行应用程序的计算机上设计或捕获的图像替换为此图像。这应该让用户知道他们没有安装Silverlight并且需要安装它,因此必须以某种方式修改屏幕截图。

对于用户在iPhone上查看网站的情况,屏幕截图必须包含iPhone用户无法安装Silverlight的事实。