На сайте Microsoft доступны:
Показаны сообщения с ярлыком Silverlight. Показать все сообщения
Показаны сообщения с ярлыком Silverlight. Показать все сообщения
Silverlight: загрузка изображений и запись в файл
воскресенье, 10 мая 2009 г.,
Ярлыки:
Silverlight
Ситуация: надо c сервера загрузить изображение, например, Test.png и сохранить в файл, указанный пользователем на своем компьютере.
Для этого необходимо создать Silverlight приложение. Код MainPage.xaml заменить следующим:
Код в MainPage.xaml.cs заменить следующим:
В корень сайта добавить файл Test.png и запустить приложение.
В IE отобразится кнопка Load. После нажатия откроется диалог сохранения файла, в котором надо указать имя файла (расширение указывать не требуется) и нажать Save.
Для этого необходимо создать Silverlight приложение. Код MainPage.xaml заменить следующим:
<UserControl x:Class= |
xmlns= |
xmlns:x= |
<Button x:Name= |
</UserControl> |
using System; |
using System |
using System |
using System |
namespace SilverlightApplication5 |
{ |
public partial class MainPage : UserControl |
{ |
public MainPage( |
{ |
InitializeComponent( |
Load |
} |
void Load_Click( |
{ |
UriBuilder ub = |
ub |
SaveFileDialog sfd = |
sfd |
if ( |
return; |
WebClient wc = |
wc |
{ |
if ( |
return; |
using ( |
{ |
int value; |
while ( |
trg |
} |
}; |
wc |
} |
} |
} |
В IE отобразится кнопка Load. После нажатия откроется диалог сохранения файла, в котором надо указать имя файла (расширение указывать не требуется) и нажать Save.
Динамические языки
суббота, 9 мая 2009 г.,
Ярлыки:
DLR,
Silverlight
Основным отличием динамических языков программирования является возможность менять свой код во время исполнения, определять новые типы, модули, классы и методы.
Для реализации динамических языков на платформе .NET предназначен DLR (Dynamic Language Runtime), на базе которого созданы IronPython (реализация языка Python) и IronRuby (реализация языка Ruby).
Динамические языки также можно использовать в Silverlight; см. SDL (Silverlight Dynamic Languages SDK). Пример IronRuby в Silverlight. Подробнее о SDL и примеры использования ... см. здесь.
Для реализации динамических языков на платформе .NET предназначен DLR (Dynamic Language Runtime), на базе которого созданы IronPython (реализация языка Python) и IronRuby (реализация языка Ruby).
Динамические языки также можно использовать в Silverlight; см. SDL (Silverlight Dynamic Languages SDK). Пример IronRuby в Silverlight. Подробнее о SDL и примеры использования ... см. здесь.
Веб-проигрыватель
вторник, 28 апреля 2009 г.,
Ярлыки:
Media,
Silverlight,
Web
Например, при загрузке веб-страницы в браузер надо начать проигрывание .mp3-файла. Сделать это можно с помощью Silverlight:
На странице есть вызов Silverlight, которому передается xaml, записанный в тег script.
Silverlight поддерживает Streaming и множество форматов, а также Server-Side Playlists.
Про адрес ipv4.fiddler - здесь.
<html xmlns= |
<head> |
<title></title> |
<script type= |
<?xml version= |
<MediaElement |
xmlns= |
xmlns:x= |
x:Name= |
</script> |
</head> |
<body> |
<object data= |
<param name= |
</object> |
</body> |
</html> |
Silverlight поддерживает Streaming и множество форматов, а также Server-Side Playlists.
Про адрес ipv4.fiddler - здесь.
Что такое Silverlight
Ярлыки:
Silverlight
Silverlight - это плагин для браузера. Скачать можно с сайта Microsoft (около 5MB). Silverlight работает в IE и в FF; также есть версия для Mac. Будет работать и в смартфонах. Подробнее здесь.
Silverlight реализован в виде ActiveX.
Данные из системного реестра для версии 3.0:
Силверлайт шутливо называют сервелат - есть такая колбаса :)
Silverlight служит для отображения xaml - это язык разметки с xml-синтаксисом. Поведение отображения можно задать/определить с помощью языка программирования C#. То есть можно сказать, что Silvelight - это "прокачанный" браузер, только вместо html используется xaml, а вместо jscript используется C#.
Разрабатывать Silverlight-приложения можно в Visual Studio с установленным Silvelight Tools (все это бесплатно).
Дополнительная информация на сайте silverlight.net
Silverlight реализован в виде ActiveX.
Данные из системного реестра для версии 3.0:
- ProgId: AgControl.AgControl
- CLSID: {DFEAF541-F3E1-4c24-ACAC-99C30715084A}
- InprocServer32: С:\Program Files\Microsoft Silverlight\3.0.40307.0\npctrl.dll
Силверлайт шутливо называют сервелат - есть такая колбаса :)
Silverlight служит для отображения xaml - это язык разметки с xml-синтаксисом. Поведение отображения можно задать/определить с помощью языка программирования C#. То есть можно сказать, что Silvelight - это "прокачанный" браузер, только вместо html используется xaml, а вместо jscript используется C#.
Разрабатывать Silverlight-приложения можно в Visual Studio с установленным Silvelight Tools (все это бесплатно).
Дополнительная информация на сайте silverlight.net
Динамическая загрузка скриптов
понедельник, 27 апреля 2009 г.,
Ярлыки:
HTML,
IE,
JavaScript,
Silverlight
Например, на веб-сайте в папке Script есть файл JScript.js:
В какой-то момент времени требуется из Silverlight вызвать загрузку .js-файла и выполнение функции Test. При этом загрузка файла должна происходить после каждого его изменения. Это можно сделать следующим образом в Silverlight:
В метод Invoke передается путь к файлу. Guid используется для того, чтобы файл не кешировался браузером.
Принцип работы метода: создается тег SCRIPT; добавляется на веб-страницу в тег HEAD; происходит перехват события onreadystatechanged и в его обработчике проверяется состояние SCRIPT.readyState; если loaded, то вызвать метод в Silverlight.
Ниже код класса с extension method'ами:
Если js-функции не существует, то получим ошибку ... см. здесь.
Код работает в IE.
function Test( |
{ |
alert( |
} |
ScriptHelper |
{ |
HtmlPage |
}) |
В метод Invoke передается путь к файлу. Guid используется для того, чтобы файл не кешировался браузером.
Принцип работы метода: создается тег SCRIPT; добавляется на веб-страницу в тег HEAD; происходит перехват события onreadystatechanged и в его обработчике проверяется состояние SCRIPT.readyState; если loaded, то вызвать метод в Silverlight.
Ниже код класса с extension method'ами:
public static class ScriptHelper |
{ |
public static HtmlElement FindByUri( |
{ |
foreach ( |
{ |
if ( |
return ( |
} |
return null; |
} |
public static ScriptReadyState ReadyState( |
{ |
return ( |
} |
public enum ScriptReadyState |
{ |
Uninitialized = |
Loading = |
Loaded = |
Interactive = |
Complete = |
} |
public static void OnLoaded( |
{ |
if ( |
{ |
callback( |
} |
else |
{ |
// обработчик событий |
EventHandler<HtmlEventArgs> eh = |
{ |
// проверить событие и состояние и вызвать handler |
if ( |
callback( |
}; |
// подключить обработчик |
scriptTag |
} |
} |
// handler - в IE вызовется раньше, |
public static void Invoke( |
{ |
HtmlElement script = |
if ( |
{ |
// создать тег и добавить на страницу в тег HEAD; |
script = |
var head = |
head |
} |
script |
} |
public static HtmlElement Create( |
{ |
// создать тег скрипта |
var js = |
js |
js |
return js; |
} |
public static string ScriptType = |
} |
Если js-функции не существует, то получим ошибку ... см. здесь.
Код работает в IE.
Использование JQuery в Silverlight
воскресенье, 26 апреля 2009 г.,
Ярлыки:
ASP.NET MVC,
JQuery,
Silverlight
Вместе с ASP.NET MVC поставляется JQuery (краткое описание).
Предположим, что Silverlight-приложение используется на одной из страниц ASP.NET MVC проекта, на которой есть вызов JQuery. Т.е. в html-коде страницы в head указан тег:
Требуется получить границы тега button:
Решение: использовать JQuery-функцию offset.
Для этого в Silverlight-приложение надо добавить следующий extension method:
Координаты кнопки можно получить следующим образом:
Предположим, что Silverlight-приложение используется на одной из страниц ASP.NET MVC проекта, на которой есть вызов JQuery. Т.е. в html-коде страницы в head указан тег:
<script type= |
<button id= |
Для этого в Silverlight-приложение надо добавить следующий extension method:
public static class JQueryHelper |
{ |
public static Rect GetBounds( |
{ |
ScriptObject jqo = |
return GetBounds( |
} |
private static Rect GetBounds( |
{ |
ScriptObject res = |
return new Rect( |
( |
( |
( |
( |
) |
} |
} |
Rect rect = |
System |
Как проверить existance JavaScript-функции
четверг, 23 апреля 2009 г.,
Ярлыки:
JavaScript,
Silverlight
Из Silverlight-приложения можно проверить existance (существование) функции с помощью следующего метода:
Метод вернет true для функции, которая определена в теге SCRIPT на странице или определена в подгружаемом .js-файле (например: <script type="text/javascript" src="Silverlight.js"></script>).
Метод определен в следующем классе:
bool res = |
Метод определен в следующем классе:
public static class FunctionHelper |
{ |
public static bool IsFunctionExists( |
{ |
return ( |
} |
} |
Как получить текст JavaScript-функции
Ярлыки:
JavaScript,
Silverlight
Если имя JavaScript-функции известно, и функция определена в одном из тегов SCRIPT на веб-странице, либо она находится в отдельном .js-файле, то ее текст можно получить в Silverlight-приложении следующим образом:
Если ''+ не указать, то в tmp окажется ссылка на System.Windows.Browser.ScriptObject;
Если функция не определена, то при вызове метода Eval в IE8 всплывет диалог Webpage Error с вопросом: Do you want to debug this webpage? This webpage contains errors that might prevent it from displaying or working correctyly. If you are not testing this webpage, click No.
После закрытия диалога в Silvelight-приложении получим System.InvalidOperationException.
Решение:
var tmp = |
Если функция не определена, то при вызове метода Eval в IE8 всплывет диалог Webpage Error с вопросом: Do you want to debug this webpage? This webpage contains errors that might prevent it from displaying or working correctyly. If you are not testing this webpage, click No.
После закрытия диалога в Silvelight-приложении получим System.InvalidOperationException.
Решение:
public static string GetFunctionCode( |
{ |
return ( |
} |
Как получить текст script'ов в Silverlight
Ярлыки:
JavaScript,
Silverlight
С помощью метода GetJavaScripts можно получить список скриптов, размещенных на веб-странице:
Метод находит все теги SCRIPT и отбирает только те, у которых есть атрибут type="text/javascript".
Для использования метода необходимо в Silverlight-приложение добавить следующий код:
Если скрипт находится в отдельном файле, то его код с помощью этого метода недоступен (в html получим, например: "\r\n<SCRIPT type=text/javascript src=\"Silverlight.js\"></SCRIPT>");
foreach ( |
{ |
System |
} |
Для использования метода необходимо в Silverlight-приложение добавить следующий код:
public static class ScriptHelper |
{ |
public static IEnumerable<string> GetJavaScripts( |
{ |
return doc |
} |
public static IEnumerable<string> GetScripts( |
{ |
Regex reg = |
foreach ( |
{ |
string html = |
if ( |
yield return html; |
} |
} |
} |
Если скрипт находится в отдельном файле, то его код с помощью этого метода недоступен (в html получим, например: "\r\n<SCRIPT type=text/javascript src=\"Silverlight.js\"></SCRIPT>");
Вызов JavaScript функции из Silverlight
Ярлыки:
JavaScript,
Silverlight
Представим себе, что требуется периодически обращаться к сервису, например, за какими-то зашифрованными данными, обрабатывать их, результат выводить на страницу.
Понятно, что JavaScript в такой ситуации не поможет, но можно использовать Silverlight. Для этого надо:
1) в .html- или .aspx-файл в тег body добавить "невидимый" Silverlight:
Ширина и высота равны 0. Если указать style="display: none;", то Silverlight не загрузится.
2) в тег head добавить функцию, которая вызывается из Silverlight:
3) в Silverlight-приложение добавить, например, следующий код:
В результате открытия веб-страницы в браузере произойдет загрузка Silverlight-приложения, в котором будет запущен рабочий поток с циклом на 1000 итераций. При каждой итерации данные передаются в JavaScript-функцию на веб-странице.
Понятно, что JavaScript в такой ситуации не поможет, но можно использовать Silverlight. Для этого надо:
1) в .html- или .aspx-файл в тег body добавить "невидимый" Silverlight:
<object data= |
<param name= |
2) в тег head добавить функцию, которая вызывается из Silverlight:
<script type= |
function ShowResult1( |
} |
</script> |
ThreadPool |
{ |
for ( |
{ |
// имитация длительной обработки |
Thread |
// передача данных в JavaScript функцию |
this |
} |
}) |
Перехват событий Silverlight в WinForms
понедельник, 13 апреля 2009 г.,
Ярлыки:
Out-of-Browser,
Silverlight,
WinForms
Silverlight можно использовать в WinForms-приложении не только для вывода Xaml. Также можно перехватывать сообщения, которые создаются в Silverlight.
За основу возьмем пример из сообщения "Silverlight в WinForms". Добавим в него неполное определение интерфейса IXcpControl (интерфейс наследует IDispatch, поэтому необязательно импортировать все свойства и методы):
И добавим наследника IReflect (используется в качестве посредника между Silverlight и WinForms; также можно использовать вместе с JavaScript):
Теперь надо создать форму и в ее конструктор поместить следующий код:
WebBrowser загрузит html и вызовет обработчик события DocumentCompleted. К событию OnLoad будет подключен обработчик, который вызовется из Silverlight после завершения загрузки xaml.
За основу возьмем пример из сообщения "Silverlight в WinForms". Добавим в него неполное определение интерфейса IXcpControl (интерфейс наследует IDispatch, поэтому необязательно импортировать все свойства и методы):
[ComImport, |
InterfaceType( |
public interface IXcpControl |
{ |
[DispId( |
string Source { get; set; } |
[DispId( |
object OnLoad { get; set; } |
} |
И добавим наследника IReflect (используется в качестве посредника между Silverlight и WinForms; также можно использовать вместе с JavaScript):
public class Handler : IReflect |
{ |
public EventHandler _EventHandler; |
public Handler( |
{ |
_EventHandler = |
} |
[DispId( |
public void Method( |
{ |
if ( |
_EventHandler( |
} |
object IReflect |
{ |
if ( |
{ |
this |
return null; |
} |
throw new MissingMethodException( |
} |
PropertyInfo[] IReflect |
MethodInfo[] IReflect |
FieldInfo[] IReflect |
MemberInfo[] IReflect |
MethodInfo IReflect |
FieldInfo IReflect |
MemberInfo[] IReflect |
MethodInfo IReflect |
PropertyInfo IReflect |
PropertyInfo IReflect |
Type IReflect |
} |
Теперь надо создать форму и в ее конструктор поместить следующий код:
this |
string html = |
<SCRIPT id= |
<?xml version= |
<Canvas |
xmlns= |
xmlns:x= |
<TextBlock FontSize= |
</Canvas> |
</SCRIPT> |
<OBJECT ID= |
<PARAM NAME= |
</OBJECT>"; |
WebBrowser wb = |
wb |
{ |
var ag = |
ag |
ag |
}; |
wb |
wb |
wb |