Rich Internet Application (RIA) - это особый класс веб-приложений. RIA приложения позволяют делать богатый пользовательский интерфейс, но без необходимости перегрузок страниц, как в обычных веб-приложениях. Типовая архитектура таких приложений приведена на рис. 4.1
(рис 4.1) Архитектура RIA приложенийОбычно приложение состоит из серверной части, где размещены веб-сервисы, бизнес-логика, СУБД. Клиентская часть может быть HTML+Ajax или Silverlight. Мы будем рассматривать в контексте Silverlight. По сети части взаимодействуют по протоколам SOAP или REST (см. Работа Silverlight с web сервисами).
В обычном бизнес приложении уровни клиента и сервера разъединены и независимо разрабатываются. Но в RIA приложениях две части разрабатываются как одно приложение. Такую возможность дают .NET RIA сервисы. RIA сервисы не входят в состав Silverlight 3 и доступны для скачивания по адресу: http://www.microsoft.com/downloads/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabcedisplaylang=en
.NET RIA сервисы упрощают разработку многоуровневых приложений объединяя платформы ASP.NET и Silverlight. Логика приложения располагается на среднем уровне и отвечает за
В общем .NET RIA сервисы могут использоваться не только с Silverlight, но и с другими технологиями написания клиентской части (Рис. 4.2). В любом случае бизнес-логика приложения будет передаваться через прокси-классы клиенту.
(рис 4.2) Возможности . NET RIA сервисовНа Рис. 4.3 показан процесс создания приложения Silverlight с поддержкой .NET RIA сервисов в Visual Studio 2008.

затем
(рис 4.3) Создание проекта Silverlight и .NET RIA ServicesЕсть возможность изменить существующий проект Silverlight, для того чтобы тот мог работать с .NET RIA сервисами. Автоматически в references проекта добавится ссылка на библиотеку System.Windows.Ria.
(рис 4.4) Изменение свойств проекта Silverlight для работы с .NET RIA сервисамиhttp://www.silverlightshow.net/AWWeb/AdventureWorksLOB.aspx - пример бизнес-приложения, использующего .NET RIA сервисы
(рис 4.5) Пример бизнес-приложения Silverlight, использующего .NET RIA сервисыВ примере виден список товаров, возможна сортировка (List price), группировка (Category), поиск, постраничный вывод.
Ключевыми моментами создания многоуровневых приложений с использованием .NET RIA сервисов являются:
DomainService.DomainContext для получения и манипулирования соответствующими сущностями.Преимуществами для клиента при использовании .NET RIA сервисов являются:
[RequiresAuthentication] - атрибут метода или свойстваШаблон Silverlight
(рис 4.6) Шаблон Silverlight Business Application
(рис 4.7) Проект, созданный по шаблону Silverlight Business ApplicationПо шаблону создаются приложение и приложение ASP.NET, которое хостит приложение Siverlight. Автоматически создается ссылка на .NET RIA сервисы. Создается решение с двумя проектами:
MyBusinessApplication - проект, содержащий код Siverlight. Это клиентская часть.MyBusinessApplication.Web - проект, содержащий код веб-приложения ASP.NET. Это средний уровень, уровень сервера.Ниже приведена работа приложения, а именно шаблонные аутентификация и регистрация.
(рис 4.8) Аутентификация пользователя в шаблоне Silverlight Business Application
(рис 4.9) Регистрация нового пользователя в шаблоне Silverlight Business ApplicationПри создании бизнес-приложения всегда имеется подключение к базе данных. Оно происходит на уровне сервера приложений. Для этого необходимо создать класс, например, AdventureWorks_DataEntities. Клиентская часть к базе данных напрямую не обращается, только через этот класс, который оперирует понятиями сущностей ( Entity ).
Например, мы получаем доступ к базе данных AdventureWorks с помощью Entity Framework и делаем выборку двух таблиц Product и ProductInventory. Используется шаблон ADO.NET Entity Data Model.

(рис 4.11) (рис 4.10) Создание класса сущностей с использованием шаблона ADO.NET Entity Data ModelТеперь клиентское приложение через класс DomainService будет оперировать этими сущностями.
Создание класса DomainService на уровне бизнес-логики - ключевой момент при использовании .NET RIA сервисов. DomainService - это класс, который содержит сущности и операции. В нем же реализуется бизнес-логика приложения. В рамках .NET RIA сервисов содержится программный код, который делает сущности и операции доступными другим уровням приложения.
Процесс создания класса DomainService показано на Рис. 4.12. Данный класс лежит в пространстве имен System.Web.DomainServices.

(рис 4.13) Создание класса DomainServiceDataContext - данные класса AdventureWorks_DataEntities, сгенерированного ранее и содержащего методы работы с двумя таблицами Product и ProductInventory из демонстрационной базы данных AdventureWorks. Новый класс DomainService имеет следующие характеристики:
LinqToEntitiesDomainService - абстрактного класса .NET RIA Services framework. NET RIA Services framework содержит базовые классы для Entity Framework и LINQ to SQL.AdventureWorks_DataEntities.DomainService помечен, как [EnableClientAccess()], чтобы клиентская часть его могла видеть.GetProduct() для запроса к содержимому объекта Product класса AdventureWorks_DataEntities, т.е. фактически к данным таблицы Product, т.к. только сущность Product помечена галочкой и нет галочки "enable editing".В этот новый класс DomainService помещается вся бизнес-логика приложения. Например, мы можем изменить метод GetProduct(), чтобы как-то отфильтровать данные. Или можно добавить в этот метод входной параметр для каких-либо целей обработки.
Важным моментом является тот, что класс DomainService имеет публичный интерфейс ( public ) и доступен из других классов. В любом случае новый класс является стартовой точкой для расширения логики приложения. Но при этом сразу получается готовое работающее приложение, отображающее содержимое сущности Product.
После компилирования веб-приложения с каталоге \Generated_Code появляется файл BusinessApplication1.Web.g.cs, содержащий прокси-класс public sealed partial class Product : Entity. Как видно является наследником класса Entity. И повторяет свойства сущностей класса DomainService. Важным аспектом генерации прокси-класса является:
DomainService и компилируется клиентское приложение. Это означает, что нельзя модифицировать этот класс, т.к. он будет перезаписан. Поэтому файл, содержащий класс, имеет атрибут "скрытый файл".DomainServiceDomainContext генерируется на клиенте для обеспечения доступа к операциям класса DomainService. В данном примере генерируется класс ProductContext, который имеет метод GetProductQuery(), который может быть использован как аргумент другого метода DomainContext.Load() , который вызывает метод GetProduct() класса ProductService DomainService, запрашивающий данные из базы данных. Класс DomainContext для каждого класса DomainService на сервере, который помечен атрибутом [EnableClientAccess()]В примере показано как можно отобразить содержимое сущности Product элементом управления DataGrid. Файл MainPage.xaml содержит данный элемент управления.
<data:DataGrid Name="TheDataGrid"></data:DataGrid>
Файл кода (code behind) MainPage.xaml.cs содержит, следующий код:
using SilverlightApplication1;
using SilverlightApplication1.Web;
using System.Windows.Ria.Data;
namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
private ProductContext _productContext = new ProductContext();
public MainPage()
{
InitializeComponent();
LoadOperation<Product> loadOp =
this._productContext.Load(this._productContext.GetProductQuery());
this.TheDataGrid.ItemsSource = loadOp.Entities;
…
После компиляции и запуска можно увидеть результат.
(рис 4.12) Отображение сущности на клиенте SilverlightКлючевыми моментами использования .NET RIA сервисов и Silverlight являются:
DomainService содержит набор сущностей и операций. Разработчикам следует располагать программный код с логикой приложения именно в этом классе.EnableClientAccess сущности класса DomainService.DomainContext, чтобы получать и манипулировать сущностямиWindows Presentation Foundation (WPF) - это система нового поколения для построения Windows и веб приложений. Основа WPF - это независимый от разрешения экрана и основанный на векторной графике механизм прорисовки, который был построен для использования всех преимуществ современного графического оборудования. WPF расширяет эту основу исчерпывающим набором средств разработки приложений, включающих Язык XAML (Extensible Application Markup Language), элементы управления, привязку данных, структуру, графику двухмерный и трехмерный, анимацию, стили, шаблоны, документы, мультимедиа, текст и типографию. WPF включен в Microsoft .NET Framework, так что можно строить приложения, включающие другие элементы библиотеки классов .NET Framework. Для отображения элементов управления используется DirectX. Для описания язык XAML (eXtensible Application Markup Language). Это XML-подобный, декларативный язык, который описывает весь "контент" отображаемый подсистемой WPF. XAML включает основные четыре категории элементов: панели, элементы управления, элементы связанные с документом и графические фигуры.
WPF существует в качестве подмножества типов .NET Framework, которые занимают большую часть в пространстве имен System.Windows. WPF предлагает дополнительные программные усовершенствования для разработки клиентских приложений Windows. Одним очевидным усовершенствованием является возможность разрабатывать приложения с помощью разметки и кода программной части. Разметка Язык XAML (Extensible Application Markup Language) обычно используется для реализации внешнего вида приложения при реализации его поведения с помощью управляемых языков программирования (кода программной части). При разделении внешнего вида и поведения разработка более эффективна, так как разработчики, реализующие внешний вид приложения, могут это делать одновременно с разработчиками, реализующими поведение приложения.Множество средств проектирования можно использовать для реализации и совместного использования разметки XAML, чтобы удовлетворить требованиям участников разработки приложения; Microsoft Expression Blend предназначен для конструкторов, в то время как Visual Studio 2005 ориентирован на разработчиков.
XAML упрощает создание пользовательских интерфейсов для модели программирования .NET Framework. Можно создать элементы управления в декларативной разметке XAML, а затем отделить определение элемента управления от логики времени выполнения, используя файлы с выделенным кодом, присоединенные к разметке с помощью определений разделяемых классов. Возможность перемежать код и разметку в XAML важна, поскольку XML сам по себе является декларативным и реально не предлагает модель для управления размещением. Основанный на XML декларативный язык интуитивно понятен для создания интерфейсов в диапазоне от прототипа до производства, особенно для людей с опытом веб-разработки и работы с веб-технологиями. В отличие от большинства других языков разметки, XAML непосредственно представляет создание экземпляров управляемых объектов. Этот общий принцип проектирования ведет к упрощению кода и доступа отладки для объектов, создаваемых в XAML.
Использование WPF существенно повышает производительность команды при разработке ПО за счет:
В следующем примере с помощью XAML реализуется внешний вид окна, содержащего одну кнопку, нажатие которой выводит сообщение. Проект Visual Studio 2008 создается по шаблону WPF Browser Application. Содержимое файла Page1.xaml, Page1.xaml.cs (code behind) и результат выполнения приведены ниже.
<Page x:Class="WpfBrowserApplication1.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Page1" Height="100" Width="200">
<Grid>
<Button Name="button" Click="button_Click">
Click Me!
</Button>
</Grid>
</Page>
private void button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Привет, Windows Presentation Foundation!");
}
(рис 4.14) Пример простого веб-приложения WPFДля приложений, размещенных в веб-обозревателе, также называемых XBAP (XAML browser applications - приложения обозревателя XAML), можно создавать страницы ( Page ) и функции страниц ( PageFunction<(Of <(T>)>) ); переходить между этими страницами можно с помощью гиперссылок (классы Hyperlink ).
При построении XBAP Visual Studio формирует следующие три файла:
.exe..manifest.ClickOnce используется для развертывания приложения и имеет расширение .xbap.Файлы *.xbap, *.exe и манифест помещаются на веб-сервере. На веб-странице создается гиперссылка, чтобы перейти в манифест развертывания. Когда пользователь щелкает ссылку и переходит к .xbap файлу, ClickOnce автоматически обрабатывает механизм загрузки и запуска приложения.
Silverlight считается подмножеством WPF.
Silverlight и WPF имеют много одинаковых элементов управления. Тех, которых нет в дистрибутиве Silverlight, можно найти в Silverlight SDK или Silverlight Toolkit. Правда реализация этих элементов в большинстве случаев неодинакова. Microsoft стремится к максимальной похожести между элементами управления. Совпадения увеличиваются от версии к версии.
И Silverlight, и WPF имеют механизм анимации с помощью линейной интерполяции. В WPF это можно сделать, используя триггеры, в Silverlight, используя VisualStateManager.
И Silverlight, и WPF поддерживают создание специальных и пользовательских элементов управления (user control и
Обе технологии позволяют проигрывать видео и аудио. Но WPF, при проигрывании, использует класс MediaElement медиапроигрывателя Windows Media Player клиента. Класс MediaPlayer в Silverlight не существует и поэтому используется класс MediaElement из Silverlight framework. Проигрыватель Silverlight полностью отделен от Windows Media Player клиента. Это приводит к тому, что не все кодеки поддерживаются.
Обе технологии используют язык XAML для описания пользовательского интерфейса. Обе платформы поддерживают файл code-behind с программным .NET кодом, чтобы манипулировать элементами, указанными в XAML файле. Большая часть языка обоих платформ совпадают.
Внешний вид приложений может быть очень похожим (см. рис. 4.15 и рис. 4.16).
(рис 4.15) Пример реализации приложения с помощью WPF
(рис 4.16) Пример реализации приложения с помощью Silverlight
Silverlight - основанная на XAML технология. Приложение Silverlight работает как плагин к браузеру и в песочнице браузера. WPF поддерживает ТОЛЬКО! платформу Windows, Silverlight - кросс-платформенная технология
Архитектурные различия. Архитектура WPF аналогична архитектуре WinForms. Приложение WPF исполняется на платформе клиента и использует его .NET framework. Silverlight, будучи плагином и с целью снизить загрузку канала при установке Silverlight Tools, является дополнением к .NET framework. Это означает, что нельзя использовать одни и те же библиотеки в обоих платформах.
Развертывание. Приложение Silverlight размещается (хостится) на веб-странице сайта. С целью уменьшений нагрузки на канал используется XAP файл, т.е. архивный *.zip файл. Его генерирует Visual Studio при компиляции проекта. WPF разворачивается как автономное приложение ClickOnce или XAML Browser. Приложение WPF (3 ранее упомянутых файла) полностью загружается на клиентский компьютер перед началом его выполнения. Важным аспектом производительности XBAP является его время запуска. Если XBAP является первым загружаемым приложением WPF, время холодного запуска может составить десять или больше секунд. Это связано с тем, что WPF выполняет прорисовку страницы хода выполнения, но для ее отображения должен быть выполнен холодный запуск среды CLR и WPF. Приложение Silverlight начинает выполняться быстрее, т.к. загружает только выполняемый в данный момент код.
BAML/XAML. BAML - бинарная форма XAML. Бинарная форма повышает производительность. Ее использует WPF приложение. Silverlight использует только XAML. Хотя языки в большинстве случаев совпадают, но есть много различий при работе с элементами управления, используемыми в двух платформах. Элементы управления разные, поэтому и параметры их разные. Например, Silverlight требует, чтобы корневой элемент содержал пространство имен xmlns, тогда как WPF поддерживает неявное задание пространства.
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
…
References. Если необходимо задать ссылку на некую сборку, то в Silverlight это делается в заголовке, а WPF может использовать GAC. Ниже приведены другие примеры различий либо в описании, либо в коде и в описании.
| WPF | <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"/>
|
| Silverlight | <Style x:Key="MyButtonStyle" TargetType="Button"/> |
| WPF | <Rectangle x:Name="MyShape"
SnapsToDevicePixels="True"/>
this.MyShape.SnapsToDevicePixels = true;
|
| Silverlight | <Rectangle x:Name="MyShape"
UseLayoutRounding="True"/>
this.MyShape.UseLayoutRounding = true;
|
Обработчик событий. Множество взаимодействий между клиентом и сервером осуществляется с помощью обработчика событий event. В WPF и Silverlight большинство событий маршрутизируемые Routed Events.
public delegate void RoutedEventHandler( Object sender, RoutedEventArgs e )
Но обработчику события передаются разные параметры (см. табл. 4.1).
| Свойство | WPF | Silverlight |
|---|---|---|
Device |
Да | Нет |
Handled |
Да | Да |
InputSource |
Да | Нет |
OriginalSource |
Да | Да |
RoutedEvent |
Да | Нет |
Source |
Да | Нет |
Timestamp |
Да | Нет |
По-разному две технологии реагируют на нажатие клавиш и мыши.
public delegate void KeyEventHandler( Object sender, KeyEventArgs e )
| Свойство | WPF | Silverlight |
|---|---|---|
ImeProcessedKey |
Да | Нет |
IsDown |
Да | Нет |
IsRepeat |
Да | Нет |
IsToggled |
Да | Нет |
IsUp |
Да | Нет |
Key |
Да | Да |
KeyboardDevice |
Да | Нет |
KeyStates |
Да | Нет |
SystemKey |
Да | Нет |
PlatformKeyCode |
Нет | Да |
public delegate void MouseButtonEventHandler(Object sender, MouseButtonEventArgs e) public delegate void MouseEventHandler(Object sender, MouseEventArgs e) public delegate void MouseWheelEventHandler(Object sender, MouseWheelEventArgs e)
| Свойство | WPF | Silverlight |
|---|---|---|
LostMouseCapture |
Да | Да |
MouseDoubleClick |
Да | Нет |
MouseDown |
Да | Да |
MouseEnter |
Да | Да |
MouseLeave |
Да | Да |
MouseLeftButtonDown |
Да | Да |
MouseLeftButtonUp |
Да | Да |
MouseMove |
Да | Да |
MouseRightButtonDown |
Да | Нет |
MouseRightButtonUp |
Да | Нет |
MouseUp |
Да | Нет |
MouseWheel |
Да | Нет |
PreviewMouseDoubleClick |
Да | Нет |
PreviewMouseDown |
Да | Нет |
PreviewMouseLeftButtonDown |
Да | Нет |
PreviewMouseLeftButtonUp |
Да | Нет |
PreviewMouseMove |
Да | Нет |
PreviewMouseRightButtonDown |
Да | Нет |
PreviewMouseRightButtonUp |
Да | Нет |
Доступ к локальным файлам. WPF имеет практически неограниченный доступ к локальным ресурсам. В то время как Silverlight имеет множество ограничений и использует OpenFileDialog элемент управления браузера. Соответственно браузер может и не разрешить это делать. Записывать данные ( SaveFileDialog ) Silverlight может только в изолированное хранилище на диске. В будущем это будет исправлено.
Шрифты. WPF использует набор шрифтов операционной системы клиента. Silverlight поддерживает стандартный ограниченный набор и, в случае необходимости, подгружает их или содержит в файле *.ttf архива *.xap. Во 2-й версии Silverlight были доступны шрифты: Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Lucinda Grande / Lucida Sans Unicode, Times New Roman, Trebuchet MS, Verdana. В третьей версии их около 230.
<TextBlock FontFamily="customfont.ttf#Custom Font"> Text </TextBlock>
Набор элементов управления. WPF и Silverlight часто используют разные элементы управления. В Silverlight 3 доступно 79 элементов.
| Элемент управления | WPF | Silverlight |
|---|---|---|
AccessText |
Да | Нет |
AdornedElementPlaceholder |
Да | Нет |
AdornerDecorator |
Да | Нет |
AutoCompleteBox |
Нет | Toolkit |
Border |
Да | Да |
BulletChrome |
Да | Нет |
BulletDecorator |
Да | Нет |
Button |
Да | Да |
ButtonChrome |
Да | Нет |
Calendar |
Да | SDK |
Canvas |
Да | Да |
CheckBox |
Да | Да |
ClassicBorderDecorator |
Да | Нет |
ComboBox |
Да | Да |
ComboBoxItem |
Да | Да |
ContentControl |
Да | Да |
ContentPresenter |
Да | Да |
ContextMenu |
Да | Нет |
Control |
Да | SDK |
DataGrid |
Да | SDK |
DatePicker |
Да | SDK |
Decorator |
Да | Нет |
DockPanel |
Да | Toolkit |
DocumentPageView |
Да | Нет |
DocumentReference |
Да | Нет |
DocumentViewer |
Да | Нет |
Ellipse |
Да | SDK |
Expander |
Да | Toolkit |
FixedPage |
Да | Нет |
FlowDocumentPageViewer |
Да | Нет |
FlowDocumentReader |
Да | Нет |
FlowDocumentScrollViewer |
Да | Нет |
Frame |
Да | Нет |
FrameworkElement |
Да | Нет |
|
Да | Нет |
Grid |
Да | Да |
GridSplitter |
Да | SDK |
GridViewColumnHeader |
Да | Нет |
GridViewHeaderRowPresenter |
Да | Нет |
GridViewRowPresenter |
Да | Нет |
GroupBox |
Да | Нет |
GroupItem |
Да | Нет |
HeaderedContentControl |
Да | Toolkit |
HeaderedItemsControl |
Да | Toolkit |
HyperlinkButton |
Нет | Да |
Image |
Да | Да |
ImplicitStyleManager |
Да | Toolkit |
InkCanvas |
Да | Нет |
InkPresenter |
Да | Да |
ItemsControl |
Да | Да |
ItemsPresenter |
Да | Да |
Label |
Да | Toolkit |
Line |
Да | Да |
ListBox |
Да | Да |
ListBoxChrome |
Да | Нет |
ListBoxItem |
Да | Нет |
ListView |
Да | Нет |
ListViewItem |
Да | Нет |
MediaElement |
Да | Да |
Menu |
Да | Нет |
MenuItem |
Да | Нет |
MultiScaleImage |
Нет | Да |
NavagationWindow |
Да | Нет |
NumericUpDown |
Нет | Toolkit |
Page |
Да | Нет |
PageContent |
Да | Нет |
PageFunction |
Да | Нет |
PasswordBox |
Да | Да |
Path |
Да | Да |
Polygon |
Да | Да |
Polyline |
Да | Да |
Popup |
Да | Да |
ProgressBar |
Да | Да |
RadioButton |
Да | Да |
Rectangle |
Да | Да |
RepeatButton |
Да | Да |
ResizeGrip |
Да | Нет |
|
Да | Нет |
RibbonWindow |
Да | Нет |
RichTextBox |
Да | Нет |
ScrollBar |
Да | Да |
ScrollChrome |
Да | Нет |
ScrollContentPresenter |
Да | Да |
ScrollViewer |
Да | Да |
Separator |
Да | Нет |
|
Да | Да |
StackPanel |
Да | Да |
StatusBar |
Да | Нет |
StatusBarItem |
Да | Нет |
SystemDropShadowChrome |
Да | Нет |
TabControl |
Да | SDK |
TabItem |
Да | SDK |
TabPanel |
Да | Нет |
TextBlock |
Да | Да |
TextBox |
Да | Да |
|
Да | Да |
TickBar |
Да | Нет |
ToggleButton |
Да | Да |
ToolBar |
Да | Нет |
ToolBarOverflowPanel |
Да | Нет |
ToolBarPanel |
Да | Нет |
ToolBarTray |
Да | Нет |
ToolTip |
Да | Да |
Track |
Да | Нет |
TreeView |
Да | Toolkit |
TreeViewItem |
Да | Toolkit |
UniformGrid |
Да | Нет |
UserControl |
Да | Да |
ViewBox |
Да | Toolkit |
Viewport3D |
Да | Нет |
VirtualizingStackPanel |
Да | Нет |
WebBrowser |
Да | Нет |
Window |
Да | Нет |
WindowsFormsHost |
Да | Нет |
WrapPanel |
Да | Toolkit |
Farmework. Silverlight framework и .NET framework, используемый WPF имеют ряд отличий.
| Класс | WPF | Silverlight |
|---|---|---|
System.Collection |
||
ArrayList |
Да | Нет |
BitArray |
Да | Да |
HashTable |
Да | Нет |
Queue |
Да | Нет |
SortedList |
Да | Нет |
Stack |
Да | Нет |
System.Collection.Generic |
||
Dictionary<TKey, TValue> |
Да | Да |
KeyedByTypeCollection<TItem> |
Да | Да |
HashSet<T> |
Да | Нет |
LinkedList<T> |
Да | Да |
List<T> |
Да | Да |
Queue<T> |
Да | Да |
SortedDictionary<TKey, TValue> |
Да | Нет |
SortedList<T> |
Да | Нет |
Stack<T> |
Да | Да |
SynchronizedCollection<T> |
Да | Нет |
Различаются также сетевые, шифровальные возможности, возможности создания потоков, блокировок, 3D графики, стилей, тем, валидаторов.
Есть вещи, которые поддерживает только одна из технологий.
WPF.
В WPF в отличие от Silverlight имеются функции печати, синтезатора речи, распознавания речи и др., поддержка тем и
Silverlight. (подробнее см. раздел )
Вызов методов 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.
(рис 4.16 ) Триггеры в Silverlight
(рис 4.17 ) Триггеры в 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 остается плагином к браузеру, что накладывает особый подход к программированию и архитектуре.
Rich Internet Application (RIA) - это особый класс веб-приложений. RIA приложения позволяют делать богатый пользовательский интерфейс, но без необходимости перегрузок страниц, как в обычных веб-приложениях. Типовая архитектура таких приложений приведена на рис. 4.1
(рис 4.1) Архитектура RIA приложенийОбычно приложение состоит из серверной части, где размещены веб-сервисы, бизнес-логика, СУБД. Клиентская часть может быть HTML+Ajax или Silverlight. Мы будем рассматривать в контексте Silverlight. По сети части взаимодействуют по протоколам SOAP или REST (см. Работа Silverlight с web сервисами).
В обычном бизнес приложении уровни клиента и сервера разъединены и независимо разрабатываются. Но в RIA приложениях две части разрабатываются как одно приложение. Такую возможность дают .NET RIA сервисы. RIA сервисы не входят в состав Silverlight 3 и доступны для скачивания по адресу: http://www.microsoft.com/downloads/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabcedisplaylang=en
.NET RIA сервисы упрощают разработку многоуровневых приложений объединяя платформы ASP.NET и Silverlight. Логика приложения располагается на среднем уровне и отвечает за
В общем .NET RIA сервисы могут использоваться не только с Silverlight, но и с другими технологиями написания клиентской части (Рис. 4.2). В любом случае бизнес-логика приложения будет передаваться через прокси-классы клиенту.
(рис 4.2) Возможности . NET RIA сервисовНа Рис. 4.3 показан процесс создания приложения Silverlight с поддержкой .NET RIA сервисов в Visual Studio 2008.

затем
(рис 4.3) Создание проекта Silverlight и .NET RIA ServicesЕсть возможность изменить существующий проект Silverlight, для того чтобы тот мог работать с .NET RIA сервисами. Автоматически в references проекта добавится ссылка на библиотеку System.Windows.Ria.
(рис 4.4) Изменение свойств проекта Silverlight для работы с .NET RIA сервисамиhttp://www.silverlightshow.net/AWWeb/AdventureWorksLOB.aspx - пример бизнес-приложения, использующего .NET RIA сервисы
(рис 4.5) Пример бизнес-приложения Silverlight, использующего .NET RIA сервисыВ примере виден список товаров, возможна сортировка (List price), группировка (Category), поиск, постраничный вывод.
Ключевыми моментами создания многоуровневых приложений с использованием .NET RIA сервисов являются:
DomainService.DomainContext для получения и манипулирования соответствующими сущностями.Преимуществами для клиента при использовании .NET RIA сервисов являются:
[RequiresAuthentication] - атрибут метода или свойстваШаблон Silverlight
(рис 4.6) Шаблон Silverlight Business Application
(рис 4.7) Проект, созданный по шаблону Silverlight Business ApplicationПо шаблону создаются приложение и приложение ASP.NET, которое хостит приложение Siverlight. Автоматически создается ссылка на .NET RIA сервисы. Создается решение с двумя проектами:
MyBusinessApplication - проект, содержащий код Siverlight. Это клиентская часть.MyBusinessApplication.Web - проект, содержащий код веб-приложения ASP.NET. Это средний уровень, уровень сервера.Ниже приведена работа приложения, а именно шаблонные аутентификация и регистрация.
(рис 4.8) Аутентификация пользователя в шаблоне Silverlight Business Application
(рис 4.9) Регистрация нового пользователя в шаблоне Silverlight Business ApplicationПри создании бизнес-приложения всегда имеется подключение к базе данных. Оно происходит на уровне сервера приложений. Для этого необходимо создать класс, например, AdventureWorks_DataEntities. Клиентская часть к базе данных напрямую не обращается, только через этот класс, который оперирует понятиями сущностей ( Entity ).
Например, мы получаем доступ к базе данных AdventureWorks с помощью Entity Framework и делаем выборку двух таблиц Product и ProductInventory. Используется шаблон ADO.NET Entity Data Model.

(рис 4.11) (рис 4.10) Создание класса сущностей с использованием шаблона ADO.NET Entity Data ModelТеперь клиентское приложение через класс DomainService будет оперировать этими сущностями.
Создание класса DomainService на уровне бизнес-логики - ключевой момент при использовании .NET RIA сервисов. DomainService - это класс, который содержит сущности и операции. В нем же реализуется бизнес-логика приложения. В рамках .NET RIA сервисов содержится программный код, который делает сущности и операции доступными другим уровням приложения.
Процесс создания класса DomainService показано на Рис. 4.12. Данный класс лежит в пространстве имен System.Web.DomainServices.

(рис 4.13) Создание класса DomainServiceDataContext - данные класса AdventureWorks_DataEntities, сгенерированного ранее и содержащего методы работы с двумя таблицами Product и ProductInventory из демонстрационной базы данных AdventureWorks. Новый класс DomainService имеет следующие характеристики:
LinqToEntitiesDomainService - абстрактного класса .NET RIA Services framework. NET RIA Services framework содержит базовые классы для Entity Framework и LINQ to SQL.AdventureWorks_DataEntities.DomainService помечен, как [EnableClientAccess()], чтобы клиентская часть его могла видеть.GetProduct() для запроса к содержимому объекта Product класса AdventureWorks_DataEntities, т.е. фактически к данным таблицы Product, т.к. только сущность Product помечена галочкой и нет галочки "enable editing".В этот новый класс DomainService помещается вся бизнес-логика приложения. Например, мы можем изменить метод GetProduct(), чтобы как-то отфильтровать данные. Или можно добавить в этот метод входной параметр для каких-либо целей обработки.
Важным моментом является тот, что класс DomainService имеет публичный интерфейс ( public ) и доступен из других классов. В любом случае новый класс является стартовой точкой для расширения логики приложения. Но при этом сразу получается готовое работающее приложение, отображающее содержимое сущности Product.
После компилирования веб-приложения с каталоге \Generated_Code появляется файл BusinessApplication1.Web.g.cs, содержащий прокси-класс public sealed partial class Product : Entity. Как видно является наследником класса Entity. И повторяет свойства сущностей класса DomainService. Важным аспектом генерации прокси-класса является:
DomainService и компилируется клиентское приложение. Это означает, что нельзя модифицировать этот класс, т.к. он будет перезаписан. Поэтому файл, содержащий класс, имеет атрибут "скрытый файл".DomainServiceDomainContext генерируется на клиенте для обеспечения доступа к операциям класса DomainService. В данном примере генерируется класс ProductContext, который имеет метод GetProductQuery(), который может быть использован как аргумент другого метода DomainContext.Load() , который вызывает метод GetProduct() класса ProductService DomainService, запрашивающий данные из базы данных. Класс DomainContext для каждого класса DomainService на сервере, который помечен атрибутом [EnableClientAccess()]В примере показано как можно отобразить содержимое сущности Product элементом управления DataGrid. Файл MainPage.xaml содержит данный элемент управления.
<data:DataGrid Name="TheDataGrid"></data:DataGrid>
Файл кода (code behind) MainPage.xaml.cs содержит, следующий код:
using SilverlightApplication1;
using SilverlightApplication1.Web;
using System.Windows.Ria.Data;
namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
private ProductContext _productContext = new ProductContext();
public MainPage()
{
InitializeComponent();
LoadOperation<Product> loadOp =
this._productContext.Load(this._productContext.GetProductQuery());
this.TheDataGrid.ItemsSource = loadOp.Entities;
…
После компиляции и запуска можно увидеть результат.
(рис 4.12) Отображение сущности на клиенте SilverlightКлючевыми моментами использования .NET RIA сервисов и Silverlight являются:
DomainService содержит набор сущностей и операций. Разработчикам следует располагать программный код с логикой приложения именно в этом классе.EnableClientAccess сущности класса DomainService.DomainContext, чтобы получать и манипулировать сущностямиWindows Presentation Foundation (WPF) - это система нового поколения для построения Windows и веб приложений. Основа WPF - это независимый от разрешения экрана и основанный на векторной графике механизм прорисовки, который был построен для использования всех преимуществ современного графического оборудования. WPF расширяет эту основу исчерпывающим набором средств разработки приложений, включающих Язык XAML (Extensible Application Markup Language), элементы управления, привязку данных, структуру, графику двухмерный и трехмерный, анимацию, стили, шаблоны, документы, мультимедиа, текст и типографию. WPF включен в Microsoft .NET Framework, так что можно строить приложения, включающие другие элементы библиотеки классов .NET Framework. Для отображения элементов управления используется DirectX. Для описания язык XAML (eXtensible Application Markup Language). Это XML-подобный, декларативный язык, который описывает весь "контент" отображаемый подсистемой WPF. XAML включает основные четыре категории элементов: панели, элементы управления, элементы связанные с документом и графические фигуры.
WPF существует в качестве подмножества типов .NET Framework, которые занимают большую часть в пространстве имен System.Windows. WPF предлагает дополнительные программные усовершенствования для разработки клиентских приложений Windows. Одним очевидным усовершенствованием является возможность разрабатывать приложения с помощью разметки и кода программной части. Разметка Язык XAML (Extensible Application Markup Language) обычно используется для реализации внешнего вида приложения при реализации его поведения с помощью управляемых языков программирования (кода программной части). При разделении внешнего вида и поведения разработка более эффективна, так как разработчики, реализующие внешний вид приложения, могут это делать одновременно с разработчиками, реализующими поведение приложения.Множество средств проектирования можно использовать для реализации и совместного использования разметки XAML, чтобы удовлетворить требованиям участников разработки приложения; Microsoft Expression Blend предназначен для конструкторов, в то время как Visual Studio 2005 ориентирован на разработчиков.
XAML упрощает создание пользовательских интерфейсов для модели программирования .NET Framework. Можно создать элементы управления в декларативной разметке XAML, а затем отделить определение элемента управления от логики времени выполнения, используя файлы с выделенным кодом, присоединенные к разметке с помощью определений разделяемых классов. Возможность перемежать код и разметку в XAML важна, поскольку XML сам по себе является декларативным и реально не предлагает модель для управления размещением. Основанный на XML декларативный язык интуитивно понятен для создания интерфейсов в диапазоне от прототипа до производства, особенно для людей с опытом веб-разработки и работы с веб-технологиями. В отличие от большинства других языков разметки, XAML непосредственно представляет создание экземпляров управляемых объектов. Этот общий принцип проектирования ведет к упрощению кода и доступа отладки для объектов, создаваемых в XAML.
Использование WPF существенно повышает производительность команды при разработке ПО за счет:
В следующем примере с помощью XAML реализуется внешний вид окна, содержащего одну кнопку, нажатие которой выводит сообщение. Проект Visual Studio 2008 создается по шаблону WPF Browser Application. Содержимое файла Page1.xaml, Page1.xaml.cs (code behind) и результат выполнения приведены ниже.
<Page x:Class="WpfBrowserApplication1.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Page1" Height="100" Width="200">
<Grid>
<Button Name="button" Click="button_Click">
Click Me!
</Button>
</Grid>
</Page>
private void button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Привет, Windows Presentation Foundation!");
}
(рис 4.14) Пример простого веб-приложения WPFДля приложений, размещенных в веб-обозревателе, также называемых XBAP (XAML browser applications - приложения обозревателя XAML), можно создавать страницы ( Page ) и функции страниц ( PageFunction<(Of <(T>)>) ); переходить между этими страницами можно с помощью гиперссылок (классы Hyperlink ).
При построении XBAP Visual Studio формирует следующие три файла:
.exe..manifest.ClickOnce используется для развертывания приложения и имеет расширение .xbap.Файлы *.xbap, *.exe и манифест помещаются на веб-сервере. На веб-странице создается гиперссылка, чтобы перейти в манифест развертывания. Когда пользователь щелкает ссылку и переходит к .xbap файлу, ClickOnce автоматически обрабатывает механизм загрузки и запуска приложения.
Silverlight считается подмножеством WPF.
Silverlight и WPF имеют много одинаковых элементов управления. Тех, которых нет в дистрибутиве Silverlight, можно найти в Silverlight SDK или Silverlight Toolkit. Правда реализация этих элементов в большинстве случаев неодинакова. Microsoft стремится к максимальной похожести между элементами управления. Совпадения увеличиваются от версии к версии.
И Silverlight, и WPF имеют механизм анимации с помощью линейной интерполяции. В WPF это можно сделать, используя триггеры, в Silverlight, используя VisualStateManager.
И Silverlight, и WPF поддерживают создание специальных и пользовательских элементов управления (user control и
Обе технологии позволяют проигрывать видео и аудио. Но WPF, при проигрывании, использует класс MediaElement медиапроигрывателя Windows Media Player клиента. Класс MediaPlayer в Silverlight не существует и поэтому используется класс MediaElement из Silverlight framework. Проигрыватель Silverlight полностью отделен от Windows Media Player клиента. Это приводит к тому, что не все кодеки поддерживаются.
Обе технологии используют язык XAML для описания пользовательского интерфейса. Обе платформы поддерживают файл code-behind с программным .NET кодом, чтобы манипулировать элементами, указанными в XAML файле. Большая часть языка обоих платформ совпадают.
Внешний вид приложений может быть очень похожим (см. рис. 4.15 и рис. 4.16).
(рис 4.15) Пример реализации приложения с помощью WPF
(рис 4.16) Пример реализации приложения с помощью Silverlight
Silverlight - основанная на XAML технология. Приложение Silverlight работает как плагин к браузеру и в песочнице браузера. WPF поддерживает ТОЛЬКО! платформу Windows, Silverlight - кросс-платформенная технология
Архитектурные различия. Архитектура WPF аналогична архитектуре WinForms. Приложение WPF исполняется на платформе клиента и использует его .NET framework. Silverlight, будучи плагином и с целью снизить загрузку канала при установке Silverlight Tools, является дополнением к .NET framework. Это означает, что нельзя использовать одни и те же библиотеки в обоих платформах.
Развертывание. Приложение Silverlight размещается (хостится) на веб-странице сайта. С целью уменьшений нагрузки на канал используется XAP файл, т.е. архивный *.zip файл. Его генерирует Visual Studio при компиляции проекта. WPF разворачивается как автономное приложение ClickOnce или XAML Browser. Приложение WPF (3 ранее упомянутых файла) полностью загружается на клиентский компьютер перед началом его выполнения. Важным аспектом производительности XBAP является его время запуска. Если XBAP является первым загружаемым приложением WPF, время холодного запуска может составить десять или больше секунд. Это связано с тем, что WPF выполняет прорисовку страницы хода выполнения, но для ее отображения должен быть выполнен холодный запуск среды CLR и WPF. Приложение Silverlight начинает выполняться быстрее, т.к. загружает только выполняемый в данный момент код.
BAML/XAML. BAML - бинарная форма XAML. Бинарная форма повышает производительность. Ее использует WPF приложение. Silverlight использует только XAML. Хотя языки в большинстве случаев совпадают, но есть много различий при работе с элементами управления, используемыми в двух платформах. Элементы управления разные, поэтому и параметры их разные. Например, Silverlight требует, чтобы корневой элемент содержал пространство имен xmlns, тогда как WPF поддерживает неявное задание пространства.
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
…
References. Если необходимо задать ссылку на некую сборку, то в Silverlight это делается в заголовке, а WPF может использовать GAC. Ниже приведены другие примеры различий либо в описании, либо в коде и в описании.
| WPF | <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"/>
|
| Silverlight | <Style x:Key="MyButtonStyle" TargetType="Button"/> |
| WPF | <Rectangle x:Name="MyShape"
SnapsToDevicePixels="True"/>
this.MyShape.SnapsToDevicePixels = true;
|
| Silverlight | <Rectangle x:Name="MyShape"
UseLayoutRounding="True"/>
this.MyShape.UseLayoutRounding = true;
|
Обработчик событий. Множество взаимодействий между клиентом и сервером осуществляется с помощью обработчика событий event. В WPF и Silverlight большинство событий маршрутизируемые Routed Events.
public delegate void RoutedEventHandler( Object sender, RoutedEventArgs e )
Но обработчику события передаются разные параметры (см. табл. 4.1).
| Свойство | WPF | Silverlight |
|---|---|---|
Device |
Да | Нет |
Handled |
Да | Да |
InputSource |
Да | Нет |
OriginalSource |
Да | Да |
RoutedEvent |
Да | Нет |
Source |
Да | Нет |
Timestamp |
Да | Нет |
По-разному две технологии реагируют на нажатие клавиш и мыши.
public delegate void KeyEventHandler( Object sender, KeyEventArgs e )
| Свойство | WPF | Silverlight |
|---|---|---|
ImeProcessedKey |
Да | Нет |
IsDown |
Да | Нет |
IsRepeat |
Да | Нет |
IsToggled |
Да | Нет |
IsUp |
Да | Нет |
Key |
Да | Да |
KeyboardDevice |
Да | Нет |
KeyStates |
Да | Нет |
SystemKey |
Да | Нет |
PlatformKeyCode |
Нет | Да |
public delegate void MouseButtonEventHandler(Object sender, MouseButtonEventArgs e) public delegate void MouseEventHandler(Object sender, MouseEventArgs e) public delegate void MouseWheelEventHandler(Object sender, MouseWheelEventArgs e)
| Свойство | WPF | Silverlight |
|---|---|---|
LostMouseCapture |
Да | Да |
MouseDoubleClick |
Да | Нет |
MouseDown |
Да | Да |
MouseEnter |
Да | Да |
MouseLeave |
Да | Да |
MouseLeftButtonDown |
Да | Да |
MouseLeftButtonUp |
Да | Да |
MouseMove |
Да | Да |
MouseRightButtonDown |
Да | Нет |
MouseRightButtonUp |
Да | Нет |
MouseUp |
Да | Нет |
MouseWheel |
Да | Нет |
PreviewMouseDoubleClick |
Да | Нет |
PreviewMouseDown |
Да | Нет |
PreviewMouseLeftButtonDown |
Да | Нет |
PreviewMouseLeftButtonUp |
Да | Нет |
PreviewMouseMove |
Да | Нет |
PreviewMouseRightButtonDown |
Да | Нет |
PreviewMouseRightButtonUp |
Да | Нет |
Доступ к локальным файлам. WPF имеет практически неограниченный доступ к локальным ресурсам. В то время как Silverlight имеет множество ограничений и использует OpenFileDialog элемент управления браузера. Соответственно браузер может и не разрешить это делать. Записывать данные ( SaveFileDialog ) Silverlight может только в изолированное хранилище на диске. В будущем это будет исправлено.
Шрифты. WPF использует набор шрифтов операционной системы клиента. Silverlight поддерживает стандартный ограниченный набор и, в случае необходимости, подгружает их или содержит в файле *.ttf архива *.xap. Во 2-й версии Silverlight были доступны шрифты: Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Lucinda Grande / Lucida Sans Unicode, Times New Roman, Trebuchet MS, Verdana. В третьей версии их около 230.
<TextBlock FontFamily="customfont.ttf#Custom Font"> Text </TextBlock>
Набор элементов управления. WPF и Silverlight часто используют разные элементы управления. В Silverlight 3 доступно 79 элементов.
| Элемент управления | WPF | Silverlight |
|---|---|---|
AccessText |
Да | Нет |
AdornedElementPlaceholder |
Да | Нет |
AdornerDecorator |
Да | Нет |
AutoCompleteBox |
Нет | Toolkit |
Border |
Да | Да |
BulletChrome |
Да | Нет |
BulletDecorator |
Да | Нет |
Button |
Да | Да |
ButtonChrome |
Да | Нет |
Calendar |
Да | SDK |
Canvas |
Да | Да |
CheckBox |
Да | Да |
ClassicBorderDecorator |
Да | Нет |
ComboBox |
Да | Да |
ComboBoxItem |
Да | Да |
ContentControl |
Да | Да |
ContentPresenter |
Да | Да |
ContextMenu |
Да | Нет |
Control |
Да | SDK |
DataGrid |
Да | SDK |
DatePicker |
Да | SDK |
Decorator |
Да | Нет |
DockPanel |
Да | Toolkit |
DocumentPageView |
Да | Нет |
DocumentReference |
Да | Нет |
DocumentViewer |
Да | Нет |
Ellipse |
Да | SDK |
Expander |
Да | Toolkit |
FixedPage |
Да | Нет |
FlowDocumentPageViewer |
Да | Нет |
FlowDocumentReader |
Да | Нет |
FlowDocumentScrollViewer |
Да | Нет |
Frame |
Да | Нет |
FrameworkElement |
Да | Нет |
|
Да | Нет |
Grid |
Да | Да |
GridSplitter |
Да | SDK |
GridViewColumnHeader |
Да | Нет |
GridViewHeaderRowPresenter |
Да | Нет |
GridViewRowPresenter |
Да | Нет |
GroupBox |
Да | Нет |
GroupItem |
Да | Нет |
HeaderedContentControl |
Да | Toolkit |
HeaderedItemsControl |
Да | Toolkit |
HyperlinkButton |
Нет | Да |
Image |
Да | Да |
ImplicitStyleManager |
Да | Toolkit |
InkCanvas |
Да | Нет |
InkPresenter |
Да | Да |
ItemsControl |
Да | Да |
ItemsPresenter |
Да | Да |
Label |
Да | Toolkit |
Line |
Да | Да |
ListBox |
Да | Да |
ListBoxChrome |
Да | Нет |
ListBoxItem |
Да | Нет |
ListView |
Да | Нет |
ListViewItem |
Да | Нет |
MediaElement |
Да | Да |
Menu |
Да | Нет |
MenuItem |
Да | Нет |
MultiScaleImage |
Нет | Да |
NavagationWindow |
Да | Нет |
NumericUpDown |
Нет | Toolkit |
Page |
Да | Нет |
PageContent |
Да | Нет |
PageFunction |
Да | Нет |
PasswordBox |
Да | Да |
Path |
Да | Да |
Polygon |
Да | Да |
Polyline |
Да | Да |
Popup |
Да | Да |
ProgressBar |
Да | Да |
RadioButton |
Да | Да |
Rectangle |
Да | Да |
RepeatButton |
Да | Да |
ResizeGrip |
Да | Нет |
|
Да | Нет |
RibbonWindow |
Да | Нет |
RichTextBox |
Да | Нет |
ScrollBar |
Да | Да |
ScrollChrome |
Да | Нет |
ScrollContentPresenter |
Да | Да |
ScrollViewer |
Да | Да |
Separator |
Да | Нет |
|
Да | Да |
StackPanel |
Да | Да |
StatusBar |
Да | Нет |
StatusBarItem |
Да | Нет |
SystemDropShadowChrome |
Да | Нет |
TabControl |
Да | SDK |
TabItem |
Да | SDK |
TabPanel |
Да | Нет |
TextBlock |
Да | Да |
TextBox |
Да | Да |
|
Да | Да |
TickBar |
Да | Нет |
ToggleButton |
Да | Да |
ToolBar |
Да | Нет |
ToolBarOverflowPanel |
Да | Нет |
ToolBarPanel |
Да | Нет |
ToolBarTray |
Да | Нет |
ToolTip |
Да | Да |
Track |
Да | Нет |
TreeView |
Да | Toolkit |
TreeViewItem |
Да | Toolkit |
UniformGrid |
Да | Нет |
UserControl |
Да | Да |
ViewBox |
Да | Toolkit |
Viewport3D |
Да | Нет |
VirtualizingStackPanel |
Да | Нет |
WebBrowser |
Да | Нет |
Window |
Да | Нет |
WindowsFormsHost |
Да | Нет |
WrapPanel |
Да | Toolkit |
Farmework. Silverlight framework и .NET framework, используемый WPF имеют ряд отличий.
| Класс | WPF | Silverlight |
|---|---|---|
System.Collection |
||
ArrayList |
Да | Нет |
BitArray |
Да | Да |
HashTable |
Да | Нет |
Queue |
Да | Нет |
SortedList |
Да | Нет |
Stack |
Да | Нет |
System.Collection.Generic |
||
Dictionary<TKey, TValue> |
Да | Да |
KeyedByTypeCollection<TItem> |
Да | Да |
HashSet<T> |
Да | Нет |
LinkedList<T> |
Да | Да |
List<T> |
Да | Да |
Queue<T> |
Да | Да |
SortedDictionary<TKey, TValue> |
Да | Нет |
SortedList<T> |
Да | Нет |
Stack<T> |
Да | Да |
SynchronizedCollection<T> |
Да | Нет |
Различаются также сетевые, шифровальные возможности, возможности создания потоков, блокировок, 3D графики, стилей, тем, валидаторов.
Есть вещи, которые поддерживает только одна из технологий.
WPF.
В WPF в отличие от Silverlight имеются функции печати, синтезатора речи, распознавания речи и др., поддержка тем и
Silverlight. (подробнее см. раздел )
Вызов методов 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.
(рис 4.16 ) Триггеры в Silverlight
(рис 4.17 ) Триггеры в 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 остается плагином к браузеру, что накладывает особый подход к программированию и архитектуре.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.