我有一个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
吗?
分配自定义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>