Создание бизнес-приложений Silverlight с использованием .NET RIA сервисов
Уникальные возможности
Есть вещи, которые поддерживает только одна из технологий.
WPF.
В WPF в отличие от Silverlight имеются функции печати, синтезатора речи, распознавания речи и др., поддержка тем и скинов (skins), "горячие клавиши".
Silverlight. (подробнее см. раздел )
- Приложению Silverlight не обязательно перегружать целую страницу для изменения одной ее части. Silverlight может вызывать методы JavaScript и наоборот и взаимодействовать с HTML document object model (DOM).
Вызов методов JavaScript из кода
using System.Windows.Browser; // call a method HtmlPage.Window.Eval("customMethod();"); // use invoke syntax HtmlPage.Window.Invoke("customMethod"); // use invoke syntax with parameters HtmlPage.Window.Invoke("customMethod", "param1", 12); // use invoke syntax and get return value. string name = (string) HtmlPage.Window.Invoke("getName");
Вызов методов кода из JavaScript (в коде необходимо указать атрибуты [ScriptableType] перед классом и [ScriptableMember] перед методом)
<script type="text/JavaScript"> function onPluginLoaded() { var sl = $get("Xaml1"); // Use ID associated with plugin. var sm = sl.content.SilverlightMethods; var name = sm.GetUserName(); // Case sensitive. } </script>
- Поддержка высококачественного видео и звука на базе технологии Smooth Streaming: качество картинки меняется автоматически в режиме реального времени в зависимости от скорости передачи данных и мощности компьютера пользователя (подробно в разделе ).
- Работа с фотографиями на базе технологии Deep Zoom: технология усиленного масштабирования Deep Zoom предлагает новый стандарт просмотра и создания изображений со сверхвысоким разрешением, обеспечивая плавное и точное масштабирование и панаромирование (подробно в разделе )
Триггеры
WPF и Silverlight 3 поддерживают триггеры. Кроме триггеров Silverlight поддерживает Visual State Manager. В будущих реализациях в WPF также будет класс Visual State Manager, увеличивая сходство обеих технологий.
В настоящее время Silverlight XAML поддерживает только один тип триггеров - EventTrigger. Каждое свойство пользовательского интерфейса имеет коллекцию Triggers, которая используется для определения одного или более триггеров (т.е. одного или более объектов EventTrigger ). Итак, первый шаг в добавлении триггера в элемент управления - создание его коллекции триггеров. Затем в эту коллекцию необходимо будет добавить, по крайней мере, один триггер события. Например, если необходимо при загрузке страницы добавить анимацию, то это выглядит следующим образом:
<Rectangle x:Name="MyAnimatedRectangle" Width="100" Height="100" Fill="Blue"> <Rectangle.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="MyAnimatedRectangle" Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> </Rectangle>
Данный код выводит квадрат синего цвета, затем за 5 секунд квадрат становится прозрачным. Код полностью одинаков как для приложения Silverlight, так и для WPF.
Стратегия повторного использования кода
Совместное использование кода WPF и Silverlight кажется невозможной задачей, учитывая многочисленные отличия. Но при аккуратном планировании разработчик все таки может значительную часть кода использовать одновременно в обеих технологиях. Silverlight становится ближе к WPF с каждым следующим релизом. Ниже приведены некоторые техники для сближения кода.
Пользовательские элементы управления. Это один из способов совместного использования кода. Элементы управления построенные полностью на коде C# будут полностью совместимы. XAML код также можно сделать максимально похожим.
Классы Partial. С помощью таких классов можно организовать целый класс, определение которого хранится в нескольких файлах. Можно класс организовывать из трех файлов. В одном содержится общий код для обеих платформ, во втором уникальный код для Silverlight, в третьем уникальный код для WPF. Таким образом, проект Silverlight будет содержать 1-й и 2-й файлы, а проект WPF 1-й и 3-й.
Директивы компилятору. Использование условных директив компилятору позволит иметь в сборке только нужные фрагменты кода:
#if SILVERLIGHT <код для Silverlight > #else < код для > #endif
Ссылки на файлы. Можно файл *.cs одного проекта использовать в другом, подключив его как ссылку.
Выводы
WPF и Silverlight создают новую парадигму в разработке приложений, используя одну и туже базовую технологию декларативного программирования и модель code-behind для процедурного программирования. Silverlight считается подразделом WPF и постоянно приближается к нему с каждым следующим релизом. Несмотря на это Silverlight остается плагином к браузеру, что накладывает особый подход к программированию и архитектуре.