【问题标题】:UWP - Load image in class libraryUWP - 在类库中加载图像
【发布时间】:2015-10-11 11:50:39
【问题描述】:

我有一个托管主菜单的通用 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 的工作示例)

【问题讨论】:

标签: c# xaml uwp


【解决方案1】:

我可以重现这个问题。我使用的当前解决方法是将资源流复制到 .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;
            }
        }

【讨论】:

  • 是的,这绝对有效。我真的不明白为什么。流不应该是流吗?无论如何,接受这个答案。我需要很长时间才能弄清楚这一点!
  • 猜测,并逐步调试它,这是因为 GetManifestResourceStream() 最终返回一个 UnmanagedResourceStream。然后,我们将其复制到托管代码可以访问的托管 MemoryStream 中。
猜你喜欢
  • 2018-08-08
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
相关资源
最近更新 更多