微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

uno 平台:GetManifestResourceNames 不返回任何内容

如何解决uno 平台:GetManifestResourceNames 不返回任何内容

对于 Uno 平台,我需要从“内容”资源加载图像。我正在使用 GetManifestResourceStream,但它在运行 UWP 项目时返回 null(我没有尝试其他风格)。

为了进一步挖掘,我添加GetManifestResourceNames,但它也返回了一个空数组。

这是我的代码,它位于 UserControl 中(Source一个属性):

private void LoadBmpSrc()
{
  if (Source == null)
    return;

  Assembly assembly = GetType().GetTypeInfo().Assembly;
  string[] names = assembly.GetManifestResourceNames();
  using (Stream stream = assembly.GetManifestResourceStream(Source))
  {
    bmpSrc = SKBitmap.Decode(stream);
  }
}

在消费 XAML 文件中,我有这个,在一个 Grid 中:

  <controls:ExpandableImage 
    Grid.Column="0"
    Source="ms-appx:///Assets/icons/folder_tab.png" 
    />

如果我交换此代码

  <Image 
    Grid.Column="0" 
    Source="ms-appx:///Assets/icons/folder_tab.png" 
    />

图像显示

编辑

这是控件的 XAML:

<UserControl
  x:Class="UnoTest.Shared.Controls.ExpandableImage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:UnoTest.Shared.Controls"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:skia="using:SkiaSharp.Views.UWP"
  >

  <skia:SKXamlCanvas x:Name="EICanvas" PaintSurface="OnPaintSurface" />
  
</UserControl>

解决方法

您的问题基本上是 Content 图像不被视为 Resources

如果要将图像作为资源包含在内,则需要将该文件的构建操作更改为嵌入式资源。更改此设置后,它将显示在

string[] names = assembly.GetManifestResourceNames();

方法调用。

您会注意到图像的名称类似于 ApplicationName.Directory.ImageName.png。您需要指定此名称才能使用

加载图像
assembly.GetManifestResourceStream(imageName)

如果您想将内容 Image 数据加载到流中,您可以使用以下代码执行此操作(尚未对其进行测试):

var imageUrl = "ms-appx:///Assets/SplashScreen.png";
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(imageUrl));
        
using(var stream = await file.OpenStreamForReadAsync())
{
   //Use your data here
}

希望这会有所帮助。-

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。