UWP - 在类库中加载图片

5
我有一个通用的Windows应用程序,它托管了一个主菜单。我想要一个插件体系结构,其中菜单项是从类库中添加的。

但是我似乎无法正确加载图像。我不能让ms-appx:///起作用,当我尝试将图像作为嵌入资源添加时,它会卡住:

var assembly = typeof(CookModule).GetTypeInfo().Assembly;
using (var imageStream = assembly.GetManifestResourceStream("My.Namespace.Folder.ImageName-100.png"))
using (var raStream = imageStream.AsRandomAccessStream())
{
    var bitmap = new BitmapImage();
    bitmap.SetSource(raStream); //<- Hangs here

我没有收到任何异常、错误或其他输出。它只是卡在那里,应用程序根本不会加载页面。

我也尝试过:

var bitmap = new BitmapImage(new Uri("/Folder/ImageName-100.png"));

我想要一种类似于WPF包URI的东西,可以指定从哪个程序集加载图像。

如何正确(且有效)地从类库向页面添加图像资源?(或者有没有人有ms-appx的工作示例,其中图像位于类库中)


我找到了一个更简单的答案。https://dev59.com/cXE95IYBdhLWcg3wi-Uc - Juan Mejia
@Juan,那是WPF,不是UWP。 - Chad Lehman
1个回答

8

我可以复现这个问题。目前我使用的解决方法是将资源流复制到.NET内存流中。

        var assembly = typeof(CookModule).GetTypeInfo().Assembly;

        using (var imageStream = assembly.GetManifestResourceStream("UWP.ClassLibrary.210644575939381015.jpg"))
        using (var memStream = new MemoryStream())
        {
            await imageStream.CopyToAsync(memStream);

            memStream.Position = 0;

            using (var raStream = memStream.AsRandomAccessStream())
            {
                var bitmap = new BitmapImage();
                bitmap.SetSource(raStream);

                display.Source = bitmap;
            }
        }

1
是的,那肯定可以。不过我真的不明白为什么。Stream 不应该就是 Stream 吗?无论如何,接受这个答案。要不然我可能需要很长时间才能弄清楚! - Troels Larsen
猜测并通过调试,它是因为GetManifestResourceStream()最终返回了一个UnmanagedResourceStream。然后我们将其复制到托管的MemoryStream中,以便托管代码可以访问它。 - Thought

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接