Китай |
Создание бизнес-приложений Silverlight с использованием .NET RIA сервисов
Различия между WPF и 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 элементов.
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 графики, стилей, тем, валидаторов.