358

Metroスタイルアプリの作成に使用される新しいWindows8ランタイムに頭を悩ませようとしています。XAMLで使用でき、.NETに基づいているため、C#とVB.NETを使用してアプリを作成できますが、HTML、CSS、DOM、JavaScriptと関係があるようです。

.NET UIプログラマーが理解できるという観点から、誰かがそれが何であるかをいくつかの段落で説明できますか?(私はそれを理解するために必要な何か「鍵」が欠けています。)


WPF、SilverlightWindowsフォームなどは、少なくともIntelシステムのWindows 8(およびWindows 10)で引き続き機能することは誰もが知っているので、教えてはいけません...

4

5 に答える 5

483

最低レベルでは、WinRT は ABI レベルで定義されたオブジェクト モデルです。COM をベースとして使用し (したがって、すべての WinRT オブジェクトIUnknownが refcounting を実装して実行します)、そこからビルドします。古い COM と比較して、かなり多くの新しい概念が追加されています。そのほとんどは .NET から直接提供されています。たとえば、WinRT オブジェクト モデルにはデリゲートがあり、イベントは .NET スタイルで行われます (デリゲートとサブスクライバーの追加/削除を使用)。イベント ソースとシンクの古い COM モデルではなく、イベントごとに 1 つのメソッド)。その他の注目すべき点として、WinRT にはパラメーター化された ("ジェネリック") インターフェイスもあります。

もう 1 つの大きな変更点は、.NET アセンブリと同様に、すべての WinRT コンポーネントでメタデータを使用できるようになったことです。COM では、typelib を使用することでちょっとしたことがありましたが、すべての COM コンポーネントがそれらを持っているわけではありません。WinRT の場合、メタデータは .winmd ファイルに含まれています。Developer Preview の "C:\Program Files (x86)\Windows Kits\8.0\Windows Metadata\" 内を確認してください。調べてみると、実際にはコードのない CLI アセンブリであり、メタデータ テーブルだけであることがわかります。実際、ILDASM で開くことができます。これは、WinRT 自体が管理されているという意味ではなく、単にファイル形式を再利用していることに注意してください。

次に、そのオブジェクト モデルの観点から実装された多数のライブラリがあり、WinRT インターフェイスとクラスを定義します。もう一度、上記の「Windows メタデータ」フォルダーを見て、そこにあるものを確認します。または、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 とは動作が異なります。相互運用アセンブリなどの中間成果物は必要なく/r、.winmd ファイルだけで、メタデータ内のすべての型とそのメンバーが .NET オブジェクトであるかのように表示されます。WinRT ライブラリ自体は完全にネイティブであることに注意してください (したがって、WinRT を使用するネイティブ C++ プログラムは CLR をまったく必要としません)。すべてのものを管理対象として公開する魔法は、CLR 自体の内部にあり、かなり低レベルです。.winmd を参照する .NET プログラムをイルダスムすると、実際には extern アセンブリ参照のように見えることがわかります。そこには、型の埋め込みなどの巧妙な策略はありません。

これも単純なマッピングではありません。CLR は、可能であれば、WinRT 型を同等のものに適合させようとします。たとえば、GUID、日付、および URI は、それぞれSystem.GuidSystem.DateTimeおよびになります。やSystem.Uriなどの WinRTコレクションインターフェイス。等々。これはどちらの場合にも当てはまります。 を実装する .NET オブジェクトがあり、それを WinRT に戻すと、.NET として認識されます。IIterable<T>IVector<T>IEnumerable<T>IList<T>IEnumerable<T>IIterable<T>

最終的に、これが意味することは、.NET Metro アプリが既存の標準 .NET ライブラリのサブセットと (ネイティブ) WinRT ライブラリにアクセスできるようになることです。その一部は、特にWindows.UIAPI に関して Silverlight と非常によく似ています。UI を定義するための XAML を引き続き使用し、Silverlight と同じ基本概念 (データ バインディング、リソース、スタイル、テンプレートなど) を扱います。多くの場合、Silverlight アプリusingは新しい名前空間によって簡単に移植できます。 API が調整されたコードのいくつかの場所を微調整します。

WinRT 自体は HTML や CSS とは何の関係もありません。.NET の場合と同様に、そこでも公開されているという意味でのみ JavaScript と関係があります。.NET Metro アプリで WinRT UI ライブラリを使用する場合、HTML/CSS/JS を処理する必要はありません (本当に必要な場合は、WebViewコントロールをホストできます...)。.NET と Silverlight のすべてのスキルは、このプログラミング モデルに非常に関連しています。

于 2011-09-14T23:14:21.897 に答える
67

ビルド基調講演から:

キーノート スタック

HTML/CSS/JavaScript アプリと C#/XAML アプリの両方に共通の API を提供しています。C# と XAML が使用されますが、正確には WPF または Silverlight ではありません。

于 2011-09-14T17:03:27.073 に答える
37

重要なアイデアは、デスクトップとメトロの 2 つの開発トラックがあることです。

  • デスクトップは、古いアプリが存在する場所です。
  • 新しいクラスのアプリケーションである Metro アプリケーションは、VB.NET、C#、C++ など、さまざまな方法で構築できます。これら 3 つの言語オプションでは、XAML を使用して UI を構築できます。もう 1 つの方法は、UI とアプリケーション コードの両方の開発に JavaScript/HTML5/CSS を使用することです。

いくつかの重要なポイント:

  • Windows 8 は、携帯電話の OS をアップグレードしたようなものです。
  • Metro では、携帯電話にトップ レベル ウィンドウが存在しないのと同様に、オーバーラップするトップ レベル ウィンドウはありません。MDI スタイルのアプリケーションが必要な場合は、デスクトップにとどまる必要があります。
  • Metro スタイル アプリは、非表示になると自動的に中断されます。これは、バッテリーの寿命を延ばすために行われました。つまり、ユーザーが操作していない間でもバックグラウンド処理を実行する多くの既存のデスクトップ アプリを Metro に移植することは意味がありません。
  • Windows 8 の ARM バージョンは、デスクトップ アプリケーションをサポートしません。したがって、アプリを作成し、それをどのバージョンの Windows でも動作させたい場合は、Metro アプリである必要があります。
于 2011-09-15T05:52:05.760 に答える
24

アーキテクチャの変更されたバージョンがあり、物事がどこにあるのかを正確に理解するのに確実に役立ちます。Telerikの忍者の1人がCLRチームとチャットし、写真を変更しました。

Windows 8プラットフォームとツール(CLRを含む)

ここで、CLRがどこにあるかを確認できます。.NETFrameworkには2つのプロファイルがあります

1- .NET Metroプロファイル(Metroアプリケーションを処理するCLR)

2- .NETクライアントプロファイル(C#およびVB.NETアプリケーションのCLRランタイム)

これにより、より明確な画像が得られることを願っています。記事全文を読む悪い絵は千の長い議論の価値があります。

于 2011-09-17T07:16:46.893 に答える
17

Microsoft からの多くの詳細がここにあります

Windows ランタイムは、API メタデータ (.winmd ファイル) を使用して公開されます。これは、.NET フレームワーク (Ecma-335) で使用される形式と同じです。基になるバイナリ コントラクトにより、選択した開発言語で直接 Windows ランタイム API に簡単にアクセスできます。Windows ランタイム API の形状と構造は、C# などの静的言語と JavaScript などの動的言語の両方で理解できます。IntelliSense は、JavaScript、C#、Visual Basic、および C++ で利用できます。

つまり、Windows ランタイムは、Windows の機能を公開し、JavaScript/C#/VB/C++ で利用できる新しいライブラリ セットです。各言語は、いくつかのサンキング レイヤーを経由するのではなく、理解して直接呼び出すことができるように作られています。

Silverlight と WPF は、CLR で実行される XAML のフレーバーです。他の機能の中でも、Windows ランタイムは、Silverlight に非常によく似たバージョンの XAML を公開しますが、CLR 経由ではなく、ネイティブな方法で公開します。CLR からアクセスできますが、C++ からもアクセスできます。

于 2011-09-15T01:34:12.510 に答える