在 UWP WebView 控件中显示资源映射图像

Display resource map image in UWP WebView Control

在这个link

它向我们展示了如何通过使用 ResourceMap 将文本和图像的内容分享出去HTML。

但是相应的article并没有向我们展示如何正确读取它并将其放入webview中。

我知道如何取回资源映射,但我不知道如何最好地将它放入 WebView

this.sharedResourceMap = await this.shareOperation.Data.GetResourceMapAsync();
foreach (KeyValuePair<string, RandomAccessStreamReference> item in this.sharedResourceMap)
{
    ResourceMapValue.Text += "\nKey: " + item.Key;
}

Item.Key 类似于 ms-appx:///Assets/Logo.png

您应该利用 class IUriToStreamResolver

在下面的示例中,我加载了位于 Assets 文件夹中的 HTML 文件 (example.html)。 Assets 文件夹还包含 HTML 文件的所有图像。 应覆盖 IUriToStreamResolverGetContent 方法,以将任何对 HTML 文件中指定的 URI(例如 )的请求转换为本地 uri 路径。在您的情况下,您可能需要调整 GetContent 以便检索资源映射存储的文件。

public sealed partial class WebViewLocalImage : Page
{
    public WebViewLocalImage()
    {
        this.InitializeComponent();
        Loaded += MainPage_Loaded;
    }

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        var uri = this.myWebView.BuildLocalStreamUri("InternalAssets", "example.html");
        this.myWebView.NavigateToLocalStreamUri(uri, new StreamUriResolver());
    }
}

public sealed class StreamUriResolver : IUriToStreamResolver
{
    public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
    {
        string path = uri.AbsolutePath;
        return GetContent(path).AsAsyncOperation();
    }

    private async Task<IInputStream> GetContent(string URIPath)
    {
        try
        {
            Uri localUri = new Uri("ms-appx:///Assets/" + URIPath);
            StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri);
            IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
            return stream.GetInputStreamAt(0);
        }
        catch (Exception)
        {
            System.Diagnostics.Debug.WriteLine("Invalid URI");
        }
        return null;
    }
}