我有一个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
?
答案 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>