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

时间:2018-02-28 15:42:06

标签: xamarin xamarin.forms

我有一个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]被添加到路径中。当使用这个&#34;完整&#34;路径,图标呈现。

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

1 个答案:

答案 0 :(得分: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>