Xamarin中的动态嵌入式资源路径

问题描述 投票:1回答:1

我有一个Xamarin应用程序,我想在我的共享App项目中使用嵌入式资源,使用如下所示的自定义视图:

xmlns:views="clr-namespace:MyApp.Views"

...

<views:Icon ResourceId="{Binding IconPath}" 
    WidthRequest="100" HeightRequest="100" 
    HorizontalOptions="Center" VerticalOptions="Center"/>

绑定IconPath包含一个字符串:MyApp.Images.dashboard.approach.svg

此路径无效,我的应用程序找不到它。打印嵌入资源时,我得到以下内容:

var assembly = typeof(App).GetTypeInfo().Assembly;
foreach (var res in assembly.GetManifestResourceNames())
{
   System.Diagnostics.Debug.WriteLine("found resource: " + res);
}

> found resource: MyApp.UWP.App.xaml
> found resource: MyApp.UWP.MainPage.xaml
> found resource: MyApp.UWP.Images.dashboard.approach.svg

因此,似乎UWP[target platform],正在被添加到路径中。使用此“完整”路径时,将呈现图标。

无论如何我可以在共享代码的这个项目中避免这个额外的前缀吗?如果没有,我可以在我的视图模型中使用API​​来动态地将[target platform]前缀添加到我的IconPath吗?

xamarin xamarin.forms
1个回答
1
投票

分配自定义LogicalName以覆盖命名空间/程序集生成的一个。

要么通过Visual Studio中的项目的Property面板,要么通过.csproj

  <ItemGroup>
    <EmbeddedResource Include="my.svg">
      <LogicalName>MyCustomSVGName.svg</LogicalName>
    </EmbeddedResource>
  </ItemGroup>

在这种情况下,它将是:

<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\dashboard\approach.svg">
  <LogicalName>MyApp.Images.dashboard.approach.svg</LogicalName>
</EmbeddedResource>
© www.soinside.com 2019 - 2024. All rights reserved.