我的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应用程序使用的控件(在单独的程序集中),但是服务器端代码也可以使用它来实现此目的?
答案 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
显示图片:
将您从运行应用程序的计算机上设计或捕获的图像替换为此图像。这应该让用户知道他们没有安装Silverlight并且需要安装它,因此必须以某种方式修改屏幕截图。
对于用户在iPhone上查看网站的情况,屏幕截图必须包含iPhone用户无法安装Silverlight的事实。