クラウド サービスをファイル ピッカー コントラクトと統合する
これまでユーザーはドキュメント、写真、ビデオ、音楽をローカル PC で整理、共有、管理していました。しかしクラウドは、大切なファイルにアクセスして使用、管理するためのより強力な方法をユーザーに提供します。Windows 8 では、クラウド サービスをアプリの深い部分から直接統合し、以前にはできなかった完全に新しいエクスペリエンスを実現できるようにすることで、このような新しいシナリオに対応しています。
こうしたシナリオの多くは、ファイル ピッカー コントラクトを使う SkyDrive アプリで重要になります。ファイル ピッカー コントラクトは、アプリに保存されたユーザーのドキュメント、写真、ビデオ、音楽を、他のすべての Windows 8 アプリが利用できるようにするために設計されました。この記事では、SkyDrive アプリ (このアプリには、「アプリ、ファイル、PC、デバイスをクラウドとつなぐ SkyDrive と Windows 8」で説明しているように、3 つのファイル ピッカー コントラクトがすべて実装されています) を使って次の点を説明します。
- ファイル ピッカー コントラクトとは何か、またファイル ピッカー コントラクトを使ってどのように一連の新しいエクスペリエンスをアプリにもたらすことができるか
- アプリに適したファイル ピッカー コントラクトを選択する方法
- ファイル ピッカー コントラクトを実装するためのヒントとテクニック
SkyDrive アプリでのファイル オープン ピッカーのサポート
ファイル ピッカー コントラクトの概要
ファイル ピッカー コントラクトは、その名前が示すように、Windows 8 アプリが他のすべての Windows 8 アプリにファイル、保存場所、さらにはファイルの更新内容でさえ提供できるようにすることで、ファイル ピッカーを拡張します。たとえば、上のスクリーンショットを見ると、SkyDrive にある私のファイルすべてにファイル ピッカー内からすぐにアクセスできることがわかります。
ファイル ピッカー コントラクトは、独立した 3 つのコントラクト (ファイル オープン ピッカー、ファイル保存ピッカー、キャッシュ ファイル アップデーター) から構成されます。この中から、アプリにとって意味があるコントラクトだけを実装する必要があります。どのコントラクトを実装するか検討する場合、次の点を指針としてください。
- ファイル オープン ピッカー: 別の方法では簡単にアクセスできない独自のファイル ビューや役に立つファイル ビューをアプリで提供するときに使います。たとえば、SkyDrive アプリにはこのコントラクトが実装されているため、すべての Windows 8 アプリが SkyDrive サービスに保存されたファイルにアクセスすることができます。
- ファイル保存ピッカー: アプリでファイル オープン ピッカー コントラクトをサポートする場合、ユーザーが保存場所としてアプリを使用できることを期待する状況でこのコントラクトを使います。たとえば、SkyDrive アプリにはこのコントラクトが実装されているため、ユーザーはどの Windows 8 アプリからでも簡単に SkyDrive サービスを保存先とすることができます。アプリによっては、データをアプリに移行できるようにするため、ファイル保存ピッカー コントラクトと共有ターゲット コントラクトのいずれ (または両方) を実装するかを決定する必要があります。この決定を下すときは、「データの共有と交換」が役立ちます。
- キャッシュ ファイル アップデーター: アプリがファイルの自動的な追跡および更新も行い、アプリの中央リポジトリと同期された状態を保つ場合にこのコントラクトを使います。SkyDrive アプリにはこのコントラクトが実装されているため、ユーザーがファイル ピッカー内を移動しなくても、SkyDrive で選択または保存されたファイルを簡単に更新することができます。たとえば、お気に入りのフォト アプリを使って SkyDrive にある写真を開いた後、その写真に加えた変更内容がすべて自動的に SkyDrive に送信されます (ファイル ピッカー内を移動する必要がありません)。
これらのコントラクトの検討は、段階的に行うと容易になります。たとえば、まず Windows 8 アプリにファイル オープン ピッカー コントラクトを実装した後、ファイル保存ピッカー コントラクトを実装することに意味があるかどうかを判断することをお勧めします。
ファイル ピッカー コントラクトの段階
ここまでで、コントラクトの概要を説明しましたので、各コントラクトをどのように実装できるかを詳しく見ていきましょう。この概念をわかりやすく説明するため、引き続き SkyDrive アプリを例として使います。
シナリオ 1: ファイル オープン ピッカー コントラクト
ファイル オープン ピッカー コントラクトにより、ユーザーがアプリで保存、作成、管理しているファイルを他の Windows 8 アプリで使うことができます。たとえば、SkyDrive にはファイル オープン ピッカー コントラクトが実装されているため、他のすべての Windows 8 アプリから SkyDrive 上のすべてのファイルにアクセスすることができます。アカウントの画像の設定から SkyDrive 上のドキュメントを開くことまで、どの Windows 8 アプリを使っていても、すべての SkyDrive コンテンツにアクセスすることができます。
アプリにこのコントラクトが実装されている場合、ファイル ピッカーのオープン モードでアプリを起動して表示することができます。アプリが対応するファイルの種類をユーザーが選択すると必ず、ファイル ピッカー メニュー内にアプリのエントリ ポイントが表示されます。
ファイル ピッカー メニューに表示された SkyDrive
アプリは、起動するとファイル ピッカーのビュー領域内に配置され、ファイル ピッカー フレームにはマニフェストで指定された配色テーマが採用されます。
ファイル オープン ピッカー コントラクトのファイル ピッカー内にホストされた SkyDrive アプリ
コントラクトを実装する
クイック スタートに従って、ファイル オープン ピッカー コントラクトをアプリに組み込むことができます。アプリにコントラクトを組み込んだ後、次のステップとして、ユーザーが選択可能なファイルが表示されるようにアプリを設定します。ファイル オープン ピッカー コントラクトをマニフェストに追加したら、組み込みの Visual Studio テンプレートを使って選択ビューを構築することができます。または、既にメイン アプリ内にビューを構築している場合、そのビューを選択ビューの基盤として使うことができます。次の図に示すように、SkyDrive ではメイン アプリの既存のビューが再利用されているため、開発時間の節約になり、メイン アプリ ビューとの一貫性も保つことができました。
SkyDrive アプリは、メイン アプリとホスト バージョンのアプリの間で
類似するビューとナビゲーション モデルを提供している
さらに、ユーザーはアプリでファイルを選択するため、アプリに選択メカニズムを用意することも重要です。既に組み込みの HTML ListView (英語) コントロールまたは XAML GridView (英語) コントロールを使っている場合、選択のメカニズムと外観は既にコントロールに組み込まれています。
SkyDrive アプリの選択の外観
ユーザーがファイルを選択したら、StorageFile (英語) をファイル ピッカーに渡し、ファイル ピッカー バスケットに表示できるようにする必要があります。シナリオに応じて、ローカル ベースの StorageFile か、URI (英語) ベースの StorageFile またはストリーム (英語) ベースの StorageFile を使うことができます。URI ベースの StorageFile とストリーム ベースの StorageFile は、ファイルを利用するアプリがそのファイルにアクセスするまでファイルのダウンロードを延期できるため、ローカル コンピューターにないファイルに最適です。どちらを使うかは、アプリの実装内容によって決まります。URI は傍観的なアプローチであり、ストリーム ベースの場合はファイルへのアクセス時のファイルのダウンロード方法を構成することができます。たとえば、URI 経由でファイルに公にアクセスできず、何らかの認証が必要な場合、ストリーム ベースのソリューションによって必要な資格情報を渡すことができます。ファイル ピッカー バスケットに URI ベースの StorageFile を追加する簡単な例を以下に示します。
JavaScript
// Create thumbnail for the file var thumbnailSource = Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(new Windows.Foundation.Uri (selectedItem.fileThumbnailUri)); // Add a file to the FileOpenPickerUI that is downloaded using BackgroundTransfer Windows.Storage.StorageFile.createStreamedFileAsync(selectedItem.name, onDataRequested, thumbnailSource).done (function (streamedFile) { pickerUI.addFile(selectedItem.id, streamedFile); }); function onDataRequested(outputStream) { var downloader = new Windows.Networking.BackgroundTransfer.BackgroundDownloader(); var download = downloader.createDownload(new Windows.Foundation.Uri(selectedItem.fileUri), null); download.startAsync().done(); var inputStream = download.getResultStreamAt(0); Windows.Storage.Streams.RandomAccessStream.copyAndCloseAsync(inputStream, outputStream).done(function () { inputStream.close(); }); }
C#
// Create thumbnail for the file var thumbnailSource = RandomAccessStreamReference.CreateFromUri(new Uri(selectedItem.FileThumbnailUri)); // Add a file to the FileOpenPickerUI that is downloaded using BackgroundTransfer StorageFile file = await StorageFile.CreateStreamedFileAsync(selectedItem.Name, OnDataRequested, thumbnailSource); _openUI.AddFile(selectedItem.Id, file); protected async void OnDataRequested(StreamedFileDataRequest outputStream) { var downloader = new Windows.Networking.BackgroundTransfer.BackgroundDownloader(); var download = downloader.CreateDownload(new Uri(_selectedItem.FileUri), null); var downloadTask = download.StartAsync(); using (var inputStream = download.GetResultStreamAt(0)) { await RandomAccessStream.CopyAndCloseAsync(inputStream, outputStream); } await downloadTask; }
選択ユーザー エクスペリエンスを構築する
ファイル オープン ピッカー コントラクトを利用する場合、選択に重点を置いてカスタマイズされた選択エクスペリエンスを提供し、メイン アプリのデザインと特徴に合わせることが重要です。「ファイル ピッカー コントラクトのガイドラインとチェック リスト」では、このエクスペリエンスのデザインに重点を置いた主な分野について説明しています。
実装の観点からガイドラインに従う簡単な方法は次のとおりです。
- コマンド: アプリ バーはファイル ピッカーでサポートされないため、Visual Studio テンプレートに用意された組み込みのコマンド行を使います。次の図の 1 がこれに対応します。
- ナビゲーション: 既にメイン アプリで使っているナビゲーション モデルとアフォーダンスに合わせます。さらに、現在の場所をアプリに表示する方法に対して一貫した方法で、Title (英語) プロパティの内容を設定します。次の図の 2 がこれに対応します。
- 選択: ファイル ピッカーでは単一選択と複数選択がどちらもサポートされるため、SelectionMode (英語) プロパティを使ってアプリで複数ファイルの選択を許可するかどうかを決定します。次の図の 3 がこれに対応します。
- ビューのフィルター: AllowedFileTypes プロパティを使ってビューをフィルターし、ユーザーが選択可能なファイルの種類のみを表示します。
- 起動: SettingsIdentifier プロパティを使ってアプリを起動し、ユーザーが前回アプリで選択を行った場所を表示します。
- 認証: 必要な場合は、ユーザーがメイン アプリに対して一貫した方法でアプリにログインできるようにします。
- 整理: コンテンツの参照に最適な方法でファイルを整理して表示します。可能であれば、負荷の高いアフォーダンス (検索など) の代わりにセマンティック ズームや負荷の低いフィルターを使います。
ファイル オープン ピッカー コントラクトが実装された SkyDrive アプリのユーザー インターフェイスの概要
全体的な流れ
まとめとして、ファイル オープン ピッカーの全体的な流れについて、概要を示しておきます。次の図では、ファイル オープン ピッカー コントラクトが実装されたアプリ (SkyDrive など) は "提供アプリ" に分類されます。
シナリオ 2: ファイル保存ピッカー コントラクト
ファイル保存ピッカー コントラクトを使うと、アプリを Windows 8 アプリの保存場所として利用できます。たとえば、SkyDrive にはファイル保存ピッカー コントラクトが実装されているため、他のすべての Windows 8 アプリから SkyDrive に直接ファイルを保存することができます。このようにして、現在使っているアプリを表示したまま SkyDrive にファイルを追加することができ、(特定のアプリがファイルの保存に使っている場所へのアクセス権を SkyDrive が持たないために) SkyDrive アプリ自体からはアクセスできないファイルを SkyDrive に保存することもできます。
前述したように、ファイル保存ピッカー コントラクトの実装を検討する場合、アプリにファイル オープン ピッカー コントラクトが既に実装されている必要があります。ファイル オープン ピッカー コントラクトによって、ユーザーが保存可能な同じ場所から選択できるようになるためです。
アプリにファイル保存ピッカー コントラクトを組み込んだら、ファイル ピッカーの保存モードでアプリを起動して表示することができます。アプリでサポートされる種類のファイルをユーザーが保存すると必ず、ファイル ピッカー メニューにアプリのエントリ ポイントが表示されます。ファイル オープン ピッカー コントラクトと同様に、アプリは起動時にファイル ピッカーのビュー領域内に配置されます。
ファイル保存ピッカー コントラクトのファイル ピッカー内にホストされた SkyDrive アプリ
コントラクトを実装する
既にファイル オープン ピッカー コントラクトを実装しましたが、ファイル保存ピッカー コントラクトの実装方法もよく似ています (同様にクイック スタートに従います)。最初のステップとして、ユーザーが保存可能な場所が表示されるようにアプリを設定します。ファイル オープン ピッカー コントラクト用に構築した既存のビューを再利用すると、開発時間の節約になり、他のアプリ ビューとの一貫性も保つことができます。実際には、ファイル オープン ピッカー ビューを再利用してバスケット コードを削除するだけでこれが可能です。
ファイル保存ピッカーにメイン アプリと同じビューを使った SkyDrive アプリ
ユーザーがファイルを保存したら (TargetFileRequested (英語) イベントを受け取ります)、ファイル名と拡張子を検証し (FileName (英語) プロパティを使います)、アプリに対して有効であることを確認します。アプリに対して有効ではない場合、UX ガイドラインに従って、エラーをユーザーに表示できます。アプリに対して有効である場合、新しい StorageFile を作成してファイル ピッカーに戻します。その後、ファイル ピッカーは、コンテンツを記述するアプリ (つまり、ファイル ピッカーを呼び出したアプリ) に StorageFile を渡します。この概念を次の簡単なコード スニペットに示します。
JavaScript
function onTargetFileRequested (e) { var request = e.request; var deferral = e.request.getDeferral(); if (doesfileExist(saveUI.fileName)) { var dialog = new Windows.UI.Popups.MessageDialog("The location already has a file named " + saveUI.fileName + ".", "Replace the existing file?"); dialog.commands.append(new Windows.UI.Popups.UICommand("Replace", function () { createFileAndFinishRequest(request, deferral) })); dialog.commands.append(new Windows.UI.Popups.UICommand("Cancel", function () { // Cancel save by setting targetFile to null request.targetFile = null; deferral.complete(); })); dialog.showAsync().done(); } else { createFileAndFinishRequest(request, deferral); } } function createFileAndFinishRequest(request, deferral) { _currentLocalFolder.createFileAsync(saveUI.fileName, Windows.Storage.CreationCollisionOption.replaceExisting).done (function (newFile) { // Return the empty placeholder file so the calling app can add the file contents request.targetFile = newFile; deferral.complete(); }); }
C#
async void OnTargetFileRequested(FileSavePickerUI sender, TargetFileRequestedEventArgs args) { var request = args.Request; var deferral = request.GetDeferral(); if (DoesFileExist(_saveUI.FileName)) { var dialog = new MessageDialog("The location already has a file named " + _saveUI.FileName + ".", "Replace the existing file?"); dialog.Commands.Add(new UICommand("Replace", (command) => { CreateFileAndFinishRequest(request, deferral); })); dialog.Commands.Add(new UICommand("Cancel", (command) => { request.TargetFile = null; deferral.Complete(); })); await dialog.ShowAsync(); } else { CreateFileAndFinishRequest(request, deferral); } } async void CreateFileAndFinishRequest(TargetFileRequest request, TargetFileRequestDeferral deferral) { request.TargetFile = await _currentFolder.CreateFileAsync(_fileSavePickerUI.FileName, CreationCollisionOption. ReplaceExisting); deferral.Complete(); }
保存ユーザー エクスペリエンスを構築する
ファイル オープン ピッカー コントラクトと同様、ファイル保存ピッカー コントラクトを利用する場合、メイン アプリのデザインと特徴に合わせてカスタマイズし、焦点の合ったエクスペリエンスを提供することが重要です。ガイドラインに従ってファイル保存ピッカー コントラクトを実装する簡単な方法は次のとおりです。
- ビューのフィルター: ユーザーがファイル ピッカーのファイルの種類の一覧で変更を行った場合 (FileNameChanged (英語) イベントを受け取ります)、ビューを更新して、選択されたファイルの種類と一致するファイルだけを表示します。次の図の 1 がこれに対応します。
- エラー処理: ファイル名、ファイルの種類、ユーザーが保存しようとしている場所が有効であることを確認します。有効でない場合、エラーを表示し、ユーザーが問題を修正できるようにします。メイン アプリと同じスタイル、特徴を持つエラーを表示してください (エラーのガイダンス)。次の図の 2 がこれに対応します。
- ファイル名: 保存ページでユーザーがファイルを選択したら、ファイル名を自動的に表示します (TrySetFileName (英語) を使います)。次の図の 3 がこれに対応します。
ファイル保存ピッカー コントラクトが実装された SkyDrive アプリの UX の概要
全体的な流れ
まとめとして、ファイル保存ピッカーの全体的な流れについて、概要を示しておきます。ファイル オープン ピッカーの図と同様、ファイル ピッカー コントラクトが実装されたアプリ (SkyDrive など) は "提供アプリ" に分類されます。
シナリオ 3: キャッシュ ファイル アップデーター コントラクト
キャッシュ ファイル アップデーター コントラクトを使うと、ユーザーが管理しているファイルが他の Windows 8 アプリによって更新されたときに、アプリがそれらのファイルを最新の状態に保つことができます。これはどういう意味でしょうか。もう一度 SkyDrive アプリについて考えてみましょう。SkyDrive にはキャッシュ ファイル アップデーター コントラクトが実装されているため、使用中のすべてのファイル (SkyDrive 上に存在するファイル) が最新の状態に保たれ、加えた変更内容がすべて SkyDrive にアップロードされます。お気に入りのフォト編集アプリを使っていて、SkyDrive に保存した写真から赤目を除去したい場合を考えます。フォト編集アプリで、ファイル ピッカーを開いて SkyDrive アプリから写真を選択します。赤目を除去すると、フォト編集アプリに変更内容が保存されます。キャッシュ ファイル アップデーター コントラクトにより、それらの変更内容が自動的に SkyDrive に送信されます。実際、そのファイルに加えた更新内容はすべて、そのファイルが存続する限り SkyDrive に送信され続けます。変更内容を SkyDrive に手動でエクスポートしたり、アップロードする必要はありません。キャッシュ ファイル アップデーター コントラクトにより、SkyDrive 上のファイルをローカル PC 上のファイルのように扱うことができるため、常に最新のコピーを使い、いつでも更新することができます。
このコントラクトの対象になるのは、特にユーザーがファイルを定期的に保存してアクセスする主要な保存場所として機能するアプリです。ほとんどのアプリでは、キャッシュ ファイル アップローダー コントラクトは必要ありません。このコントラクトには、大量の状態管理、複雑なデータ フローの管理、競合の解決、UI 動作の有効化が必要なため、実装は簡単ではありません。コントラクトを等級ごとに分類するならば、このコントラクトは上級者向けです。
このコントラクトを組み込むと、ユーザーが管理しているファイルの更新が必要になるたびにアプリがアクティベーションされます (ただし、必ずしもユーザーに表示されるとは限りません)。アプリはいつでもこの目的でアクティベーションできますが、アプリのアクティベーションはすべてシステムによって行われ、ユーザーが直接行うわけではありません。たとえば、アプリが提供するファイルにユーザーによりデータが保存された場合、システムによりアプリがアクティベーションされるため、適切に対応できます (変更内容をクラウド サービスにアップロードするなど)。
コントラクトを実装する
クイック スタートに従って、キャッシュ ファイル アップデーター コントラクトの実装を開始することができます。アプリにコントラクトが実装されると、自動的にアクティベーションされて、提供したファイル内の変更内容が処理されます。
システムには、どの StorageFile を管理しているかを知らせる必要があります。setUpdateInformation (英語) メソッドを使うと、読み書きアクセス許可を設定し、ファイルを提供するためにアプリをアクティベーションする方法とタイミングを制御できます。通常は、ユーザーがファイル オープン ピッカー コントラクトを使ってアプリから選択するすべてのファイル、またはファイル保存ピッカー コントラクトを使ってアプリに保存するすべてのファイルにこの情報を設定するのがベストです。キャッシュ ファイル アップデーター コントラクトをサポートするための C#、C++、および JavaScript コードは、ファイル ピッカー コントラクトの SDK サンプル (英語) で入手できます。
さらに、キャッシュ ファイル アップデーター コントラクトを実装するときは、ファイルを提供する前に資格情報の入力やバージョン競合の解決をユーザーに求めることが必要な場合もあります。そのような場合は、UI が必要であり、アプリがファイル ピッカー内で起動されることをシステムに知らせる (英語) ことができます。
キャッシュ ファイル アップローダーの処理中に資格情報を求める SkyDrive アプリ
皆さんのアプリが設定するオプションに加えて、更新を要求するアプリやファイルを保存するアプリによって、キャッシュ ファイル アップデーター コントラクトの流れが制御されることがあります。特に、呼び出し元アプリによって、皆さんのアプリによる UI 表示がブロックされる場合があります。このことが皆さんにアプリに示されることはありません。呼び出し元アプリがファイルの更新や保存を求めていて、皆さんのアプリがその要求を完了するために UI を表示する必要がある場合、呼び出しが失敗するだけです。
プロセスの全体にわたって、UIStatus(英語) 列挙値を使って処理中のステップを調べることができます。
更新および保存ユーザー エクスペリエンスを構築する
キャッシュ ファイル アップデーター コントラクトの UI 部分は限定的なものですが、アプリはガイドラインに従うようにしてください。
- UI の表示: ユーザーの操作 (資格情報やファイルの競合など) がどうしても必要な場合にのみ UI を要求します。更新または保存が成功しなかったことをユーザーに知らせるエラー ケースを呼び出し元アプリに返します。加えて、次回メイン アプリがファイル ピッカー UI や他の UI サーフェス (トーストなど) 以外で起動したとき、情報メッセージ ("ファイルが正常に保存されました" など) をメイン アプリでのみ表示します (必要な場合)。
- ステータス: アプリで多数の更新と保存が処理される場合、メイン アプリの UI に各タスクの進捗状況を表示することを検討してください。これによって、ユーザーは進捗状況を把握して問題を解決することができます。
全体的な流れ
まとめとして、キャッシュ ファイル アップデーターの全体的な流れについて、概要を示しておきます。これまでの図と同様、ファイル ピッカー コントラクトが実装されたアプリ (SkyDrive など) は "提供アプリ" に分類されます。
終わりに
この記事では、ファイル ピッカー コントラクトについて説明し、ファイル ピッカー コントラクトを使って Windows 8 でアプリに新しいエクスペリエンスを取り込む方法を示しました。ファイル オープン ピッカー コントラクトは、ユーザーがアプリで保存、作成、管理しているファイルを他の Windows 8 アプリで使うことができるようにするためのスタート地点として利用できます。アプリにより高度な機能を追加するにつれて、ファイル保存ピッカー コントラクトとキャッシュ ファイル アップデーター コントラクトを段階的に使うことで、アプリをさらに多くの Windows 8 シナリオの一部とすることができます。
3 つの注意すべき重要な点を以下に示します。
- ファイル ピッカー コントラクトは、段階的に使うように設計されています。最初はファイル オープン ピッカー コントラクトを使い、次にファイル保存ピッカー コントラクトに移行した後、キャッシュ ファイル アップデーター コントラクトに移行します。
- 全体をとおしてアプリの特徴が際立つようにしましょう。ユーザーは、通常バージョンのアプリを使うことに慣れるため、必ずその特徴、外観、ナビゲーションのアフォーダンスをファイル ピッカー内にホストされたバージョンにも取り込んでください。
- UX ガイダンスに従うことで、ファイル ピッカーにより提供されるどのアフォーダンスを使っているときも、アプリの特徴が表れるようにします。このようにして、ユーザーはファイル ピッカー内でアプリを使っているときに一貫したすばらしいエクスペリエンスを得ることができます。
Windows 8 でのファイル ピッカー コントラクトの詳細については、以下のリンクをご覧ください。また、Microsoft のフォーラム (英語) でご質問いただくこともできます。
リンク |
タイプ |
ハイライト |
UX ガイドライン |
ファイル ピッカー コントラクトを実装するガイドライン |
|
クイック スタート |
ファイル ピッカー コントラクトをアプリに組み込む方法について説明しています |
|
API リファレンス |
ファイル オープン ピッカー コントラクトとファイル保存ピッカー コントラクトのリファレンス ドキュメント |
|
Windows.Storage.Provider (英語) 名前空間 |
API リファレンス |
キャッシュ ファイル アップデーター コントラクトのリファレンス ドキュメント |
ファイル ピッカー コントラクト (英語) |
コード サンプル |
ファイル オープン ピッカー コントラクト、ファイル保存ピッカー コントラクト、キャッシュ ファイル アップデーター コントラクトの使用方法のデモンストレーション |
お読みいただき、ありがとうございました。
--Windows ユーザー エクスペリエンス担当シニア プログラム マネージャー、Scott Hoogerwerf
協力: Derek Gebhard