Программно визуализировать изображение элемента управления Silverlight и сохранить его на диск - PullRequest
1 голос
/ 19 октября 2011

На моем сайте 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 голосов
/ 19 октября 2011

Вам не нужно делать это на 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>

Соответствующий бит<a href..., который используется, когда Silverlight отсутствует, чтобы позволить пользователю пойти и установить плагин.

По умолчанию это отображает изображение в http://go.microsoft.com/fwlink/?LinkID=161376:

Install Silverlight image

Замените его изображением, созданным вами или созданным с компьютера, на котором выполняется ваше приложение.Это должно дать пользователю понять, что у него не установлен Silverlight, и ему необходимо установить его, поэтому снимок экрана нужно будет каким-то образом изменить.

В вашем случае пользователь просматривает сайт на iPhoneснимок экрана должен включать тот факт, что пользователи iPhone не могут установить Silverlight.

0 голосов
/ 19 октября 2011

Невозможно запустить Silverlight, встроенный в приложение ASP.NET, поэтому не будет CustomSilverLightControl, который вы поместили в набросок кода выше. Лучшее, на что вы можете надеяться, это запуск Silverlight внутри дочернего процесса, но, скорее всего, это будет медленным и значительным расходом ресурсов.

Приложение Silverlight может сделать снимок экрана, и это не так уж сложно сделать. Получить скриншот из Silverlight сложнее, потому что Silverlight работает в плагине браузера. Вам также придется изменить приложение Silverlight, чтобы оно поддерживало эту функцию создания снимков экрана и могло скрывать его от обычных пользователей.

Боюсь, что потребуется приложить немало усилий, чтобы изменить приложение Silverlight для поддержки такого поведения при создании снимков экрана, а также настроить драйвер, необходимый для запуска приложения Silverlight, заставить его сделать собственный снимок экрана и отправить скриншот обратно в веб-приложение. Учитывая неизбежные проблемы с производительностью, которые может вызвать этот подход, я, честно говоря, не вижу, чтобы эти усилия стоили того.

...