[解決済み] Windows 8 ランタイム(WinRT / Windowsストアアプリ / Windows 10 ユニバーサルアプリ)とSilverlightやWPFの比較はどうですか?[クローズド]
質問内容
Windows 8 の新しいランタイムを理解しようとしています。 メトロ スタイルアプリを開発しました。を使うことができるのは知っています。 XAML で、.NETベースなのでC#やVB.NETでアプリが書けるのですが、そうなると、HTML、CSS、DOM、JavaScriptが関係してくるようです。
どなたか、.NET UIプログラマーが理解できる言葉で、それが何であるかを少し説明していただけませんか?(私はそれを理解するために必要な「鍵」のようなものを見逃しているのです)。
WPFはみんな知っている。 シルバーライト , Windowsフォーム などは、少なくともIntelシステム上ではWindows 8(およびWindows 10)でも動作し続けるので、そんなことは言わないでください...。
解決方法は?
WinRTは、最下層では、ABIレベルで定義されたオブジェクト・モデルです。これは、COMをベースとしています(したがって、すべてのWinRTオブジェクトは、COMを実装しています)。
IUnknown
そして、そこから構築していきます。例えば、WinRTのオブジェクト・モデルにはデリゲートがあり、イベントは、イベント・ソースとシンクという古いCOMモデルではなく、.NETスタイル(デリゲートとイベントごとのサブスクライバー・メソッドの追加と削除)で実行されます。また、WinRTは、パラメトリックな("generic")インターフェースを持っているのも特徴です。
もうひとつの大きな変更点は、すべてのWinRTコンポーネントが、.NETアセンブリと同様に、メタデータを利用できることです。COMでは、typelibsによってメタデータが提供されていましたが、すべてのCOMコンポーネントがメタデータを持っているわけではありませんでした。WinRTの場合、メタデータは.winmdファイルに含まれています。Developer Previewでは、C:³³ Files (x86)³³³Windows Kits³.0Windows Metadata³³³の中を見てください。このように、Developer PreviewにあるWindows Metadataは、CLIアセンブリで、コードはなく、メタデータ・テーブルだけであることがわかります。実際、ILDASMで開くことができます。なお、これはWinRT自体が管理されているわけではなく、単にファイル形式を再利用しているだけです。
そして、そのオブジェクトモデルに基づいて実装された、WinRTのインターフェースやクラスを定義したライブラリが多数あります。また、VSでオブジェクトブラウザを起動し、フレームワークセレクタで「Windows 8.0」を選択すると、何が含まれているかを確認できます。そこには多くのものがあり、UIだけを扱っているわけではありません。
Windows.Data.Json
または
Windows.Graphics.Printing
または
Windows.Networking.Sockets
.
そして、UIに特化したいくつかのライブラリができあがります - ほとんどの場合、これらは
Windows.UI
または
Windows.UI.Xaml
. これらの多くは、WPF/Silverlight の名前空間と非常によく似ています。
Windows.UI.Xaml.Controls
は密接にマッチしている
System.Windows.Controls
についても同様です。
Windows.UI.Xaml.Documents
などです。
さて、.NETには、WinRTコンポーネントを.NETアセンブリであるかのように直接参照できる機能があります。これはCOM Interopとは異なる動作で、Interopアセンブリのような中間成果物を必要とせず、単に
/r
.winmdファイルを作成すると、そのメタデータにあるすべての型とそのメンバが、あたかも.NETオブジェクトであるかのように表示されるようになります。WinRTのライブラリ自体は完全にネイティブです(したがって、WinRTを使用するネイティブC++プログラムは、CLRを全く必要としません) - すべてのものをマネージドとして公開するマジックは、CLR自体の中にあり、かなり低レベルであることに注意してください。.winmdを参照する.NETプログラムをildasmすると、それが実際には外部アセンブリ参照のように見えることがわかるでしょう - そこには、型埋め込みなどの巧妙なトリックはありません。
CLRは、可能な限りWinRTの型をその同等品に適応させようとするのです。例えば、GUID、日付、URIは、以下のようになります。
System.Guid
,
System.DateTime
と
System.Uri
のようなWinRTのコレクションインターフェイスは、それぞれ
IIterable<T>
と
IVector<T>
になる
IEnumerable<T>
と
IList<T>
といった具合です。これは両方向に当てはまります。例えば、.NETオブジェクトで
IEnumerable<T>
それをWinRTに渡すと、WinRTはそれを
IIterable<T>
.
最終的には、.NET Metroアプリは、既存の標準.NETライブラリのサブセットと、(ネイティブの)WinRTライブラリにアクセスすることができます。
Windows.UI
- は、API的にはSilverlightと非常によく似ています。UI を定義するために XAML を使用し、データバインディング、リソース、スタイル、テンプレートなど、Silverlight と同じ基本概念を扱うことができます。多くの場合、Silverlightアプリを移植するには、単に
using
新しい名前空間と、APIが調整されたコードのいくつかの場所を微調整してください。
WinRT自体は、HTMLやCSSとは関係なく、JavaScriptとの関係も、.NETと同じように、そこで公開されるという意味合いだけです。.NET MetroアプリでWinRTのUIライブラリを使う場合、HTML/CSS/JSを扱う必要はない(まあ、どうしても使いたいなら
WebView
コントロールになります...)。.NETとSilverlightのスキルは、このプログラミングモデルにも大いに関係します。
関連
-
[解決済み] ラジオボタンをenumにバインドするには?
-
[解決済み] StackPanelの子パネルが下方向に最大限のスペースを埋めるようにするには?
-
[解決済み】無料のWPFテーマがあれば教えてください。[クローズド]
-
[解決済み] ユーザーコントロールライブラリーとカスタムコントロールライブラリーの違いは何ですか?
-
[解決済み] DataTrigger where value is NOT null?
-
[解決済み] WPF フォントのぼやけ問題- 解決策
-
[解決済み] WPF: グリッドに列/行のマージン/パディングを設定できますか?
-
[解決済み] WPF: スクロールバー付きItemsControl (ScrollViewer)
-
[解決済み] WPFのキーボードショートカット
-
[解決済み] ViewModelLocatorとは何ですか?また、DataTemplatesと比較した場合の長所と短所は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015の追加デバッグオプションの無効化
-
[解決済み] 静的プロパティへのバインディング
-
[解決済み] WPFのテキストラップとWrapWithOverflowの比較
-
[解決済み] オーバーレイコントロールを他のすべてのコントロールの上に配置するには?
-
[解決済み] スタックパネルでアイテムを整列させる?
-
[解決済み] MVVMテンプレートの好例
-
[解決済み] WPF Numeric UpDownコントロールはどこにありますか?
-
[解決済み] WPF: スクロールバー付きItemsControl (ScrollViewer)
-
[解決済み] Prism for WPFとは?
-
[解決済み] レンダリング時間やパフォーマンスの面で最も効率的なパネルはどのような順番になりますか?