3

Tapped イベントに応答して PDF ファイルを読み込みたい。

ファイルをプロジェクトに追加し ([追加] > [既存のアイテム])、[ビルド アクション] を [コンテンツ] に、[出力ディレクトリにコピー] を [新しい場合はコピー] に設定しました。

必要なコードは次のようなものになると思います。

async Task LoadTutorial()
{
    await Launcher.LaunchUriAsync(new Uri("what should be here to access the output folder?"));
}

私が正しければ、Uri として何を渡す必要がありますか? そうでなければ、これはどのように達成されますか?

アップデート

関連するメモとして、提案されたスキームを使用して XAML に画像を追加するには、次のようにするとうまくいくと思いました。

<Image Source="ms-appx:///assets/axXAndSpaceLogo.jpg"></Image>

...しかし、そうではありません。

更新 2

これを試してPDFファイルを開きます(サブフォルダーではなく、プロジェクトのルートにあります):

async private void OpenTutorial()
{
    IStorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
    IStorageFile file = await folder.GetFileAsync("ms-appx:///PlatypusTutorial.pdf");
    await Launcher.LaunchFileAsync(file);
}

...この実行時例外が発生し、上記の最初の行でスローされました。

ここに画像の説明を入力

更新 3

そしてこれで、提供されたリンクから適応:

var uri = new System.Uri("ms-appx:///ClayShannonResume.pdf");
var file = Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);
await Launcher.LaunchFileAsync(file);

...コンパイル時のエラーが表示されます:

'Windows.System.Launcher.LaunchFileAsync(Windows.Storage.IStorageFile)' に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

-と:

引数 1: 'Windows.Foundation.IAsyncOperation' から 'Windows.Storage.IStorageFile' に変換できません

...最後の行に。

更新 4

Lecrenski、Netherlands、Sanders、およびAshelyによる「Pro Windows 8 Programming」の76ページによると、これは機能するはずです。

<Image Source="Assets/axXAndSpaceLogo.jpg" Stretch="None"></Image>

...(IOW、「ms-appx:///」ジャズは不要です)、多かれ少なかれそうです。私の特定のケースでは、私の(大きな)画像で、これをしなければなりませんでした:

<Image Source="Assets/axXAndSpaceLogo.jpg" Width="120" Height="80" HorizontalAlignment="Left"></Image>

幅と高さの設定がないと、画像はサイよりも大きく表示され、フライアウトの右側に収まりませんでした。

更新 5

これはPDFファイルを開くために機能することがわかりました(「PlatypusTut.pdf」がプロジェクトに追加され、「ビルドアクション」が「コンテンツ」に設定され、「出力ディレクトリにコピー」が「新しい場合はコピー」に設定されました):

IStorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
IStorageFile file = await folder.GetFileAsync("PlatypusTut.pdf");
bool success = await Launcher.LaunchFileAsync(file);
if (!success)
{
    MessageDialog dlgDone = new MessageDialog("Unable to open the Tutorial at this time. Try again later.");
    await dlgDone.ShowAsync();
}

...しかし、これは設計時、ローカルでのみ機能するのだろうか。これをユーザーのマシンにインストールしても機能しますか? IOW、単に「PlatypusTut.pdf」を GetFileAsync() に渡すだけで十分ですか?

4

2 に答える 2

1

私たちはそのようにしました:

public async Task OpenResearchAsync(string path)
{
    if (path.ToLower().StartsWith("http://"))
    {
        await Launcher.LaunchUriAsync(new Uri(path));
    }
    else
    {
        IStorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
        IStorageFile file = await folder.GetFileAsync(path);
        await Launcher.LaunchFileAsync(file);
    }
}
于 2014-11-11T06:41:45.937 に答える