Ответ 1
Это очень широкий вопрос. Моя компания недавно написала документ, в котором излагаются различия между этими двумя технологиями и около 70 страниц. К сожалению, он еще не опубликован, или я бы дал вам ссылку.
EDIT: Как и было обещано, здесь ссылка к документу на Codeplex:
http://wpfslguidance.codeplex.com/
Однако я попытаюсь обобщить.
-
WPF - это мощная клиентская платформа Windows, которая имеет доступ ко всей .NET Framework. Silverlight - это технология, основанная на браузере, которая имеет доступ к подмножеству .NET Framework (называемому CoreCLR). Таким образом, вы заметите различия, используя, казалось бы, ежедневные методы и объекты в рамках. Например, метод Split() в классе String имеет 3 переопределения в Silverlight, но 6 в .NET Framework. Вы увидите различия, подобные этому.
-
В WPF все визуально отображаемые элементы выводятся из базового класса Visual. В Silverlight они этого не делают; вместо этого они происходят из Control. Обе технологии, однако, в конечном итоге вытекают из класса DependencyObject по иерархии.
-
WPF, в настоящее время, отправляет или имеет больше пользовательских элементов управления, чем Silverlight; хотя эта разница смягчается с помощью Silverlight Toolkit и предстоящей версии Silverlight 3.
-
WPF поддерживает 3 типа маршрутизируемых событий (прямой, барботирование и туннелирование). Silverlight поддерживает только прямые и пузырьки.
-
Существует довольно много различий в отношении данных, которые будут несколько смягчены следующей версией Silverlight. В настоящее время Silverlight не поддерживает режим привязки, OneWayToSource или Explict UpdateSourceTriggers. Кроме того, Silverlight по умолчанию привязывает к OneWay привязку данных, если ни один не установлен, тогда как WPF использует режим по умолчанию, указанный свойством dependency.
-
Silverlight не поддерживает MultiBinding.
-
Silverlight поддерживает XmlDataProvider, но не ObjectDataProvider. WPF поддерживает оба.
-
Silverlight может выполнять только асинхронные сетевые вызовы. WPF имеет доступ к полному сетевому стеку .Net и может выполнять любой тип вызова. Кроме того, в настоящее время Silverlight поддерживает SOAP, но не может обрабатывать исключения SOAP изначально (это может измениться в Silverlight 3).
-
Существуют огромные различия в криптографии (Silverlight имеет 20 классов в пространстве имен, а WPF имеет доступ к 107). В принципе, Silverlight поддерживает только 4 алгоритма хэширования и протокол шифрования AES.
-
Silverlight еще не поддерживает: Commanding, Validation, Printing, XPS Documents, Speech, 3D, Freezable objects или InterOp с Windows Desktop; все из которых доступны в WPF.
-
Silverlight поддерживает взаимодействие браузера, другие параметры потоковой передачи мультимедиа, включая маркеры временной шкалы и Deep Zoom. WPF еще не поддерживает эти функции.
Это отнюдь не является полным, поскольку я пытался уменьшить 70-страничный документ в пулевые точки.
Наконец, даже при всех этих различиях Microsoft пытается закрыть разрыв между двумя технологиями. Инструментарий Silverlight Toolkit и набор инструментов WPF затрагивают некоторые недостатки каждой технологии. В Silverlight 3 будет добавлено много функций, недоступных в настоящее время (например, привязка данных от элемента к элементу). Однако из-за различий в основных библиотеках всегда будут некоторые различия в Framework.