ベストアンサー1
それは非常に幅広い質問です。私の会社は最近、2 つのテクノロジーの違いを概説したホワイトペーパーを作成しました。約 70 ページです。残念ながら、まだ公開されていないので、リンクをお送りします。
編集: 約束どおり、Codeplex のホワイトペーパーへのリンクは次のとおりです。
http://wpfslguidance.codeplex.com/
ただし、要約してみます。
WPF は、完全な .Net Framework にアクセスできる、Windows のシック クライアント プラットフォームです。Silverlight は、.Net Framework のサブセット (CoreCLR と呼ばれる) にアクセスできるブラウザー ベースのテクノロジです。そのため、フレームワーク内の一見日常的なメソッドやオブジェクトを使用する際に違いに気付くでしょう。たとえば、String クラスの Split() メソッドには、Silverlight では 3 つのオーバーライドがありますが、.Net Framework では 6 つのオーバーライドがあります。このような違いはよく見られます。
WPF では、視覚的にレンダリングされるすべての要素は Visual 基本クラスから派生します。Silverlight では、そうではなく、Control から派生します。ただし、どちらのテクノロジも、最終的には階層の上位にある DependencyObject クラスから派生します。
現在、WPF には Silverlight より多くのユーザー コントロールが付属しているか、または利用可能ですが、この違いは Silverlight Toolkit と近日リリース予定の Silverlight 3 によって緩和される予定です。
WPF は、3 種類のルーティング イベント (ダイレクト、バブリング、トンネリング) をサポートします。Silverlight はダイレクトとバブリングのみをサポートします。
データ バインディングの違いは数多くありますが、Silverlight の次のバージョンでは多少緩和される予定です。現在、Silverlight はバインディング モード、OneWayToSource、または Explict UpdateSourceTriggers をサポートしていません。さらに、Silverlight は何も設定されていない場合はデフォルトで OneWay データ バインディングを使用しますが、WPF は依存関係プロパティで指定された既定のモードを使用します。
Silveright は MultiBinding をサポートしていません。
Silverlight は XmlDataProvider をサポートしますが、ObjectDataProvider はサポートしません。WPF は両方をサポートします。
Silverlight は非同期ネットワーク呼び出しのみを実行できます。WPF は完全な .Net ネットワーク スタックにアクセスでき、あらゆる種類の呼び出しを実行できます。また、現在、Silverlight は SOAP をサポートしていますが、SOAP エラー例外をネイティブに処理することはできません (これは Silverlight 3 で変更される可能性があります)。
暗号化には大きな違いがあります (Silverlight の名前空間には 20 個のクラスがありますが、WPF では 107 個のクラスにアクセスできます)。基本的に、Silverlight は 4 つのハッシュ アルゴリズムと AES 暗号化プロトコルのみをサポートしています。
Silverlight では、コマンド、検証、印刷、XPS ドキュメント、音声、3D、Freezable オブジェクト、Windows デスクトップとの相互運用がまだサポートされていません。これらはすべて WPF で利用できます。
Silverlight は、ブラウザー相互運用性、タイムライン マーカーなどのより多くのメディア ストリーミング オプション、Deep Zoom をサポートしています。WPF では、これらの機能はまだサポートされていません。
これは決して完全ではありません。70 ページの文書を箇条書きにまとめようとしたからです。
最後に、これらすべての違いがあるにもかかわらず、Microsoft は 2 つのテクノロジ間のギャップを埋めようとしています。Silverlight Toolkit と WPF Toolkit はどちらも、それぞれのテクノロジの欠点の一部に対処しています。Silverlight 3 では、現在利用できない多くの機能 (要素間のデータ バインディングなど) が追加されます。ただし、コア ライブラリの違いにより、フレームワークには常にいくつかの違いが存在します。