![](/img/trans.png)
[英]MasterDetailPage background image not displaying in IOS in xamarin.forms
[英]Xamarin.forms embedded image not shown on iOS
我正在使用 xamarin.forms 构建一个应用程序。 由于图像要在两种设备上显示,我选择使用嵌入图像并遵循本教程。
我的图像的构建动作被配置为 EmbeddedRessource
我创建了自定义类:
using System;
using System.Reflection;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace PianoTraining
{
[ContentProperty(nameof(Source))]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Source == null)
return null;
return ImageSource.FromResource(Source, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
}
}
}
我通过 XAML 加载我的图像:
<Image x:Name="ChordStatusImage" AbsoluteLayout.LayoutBounds="0.66,0.33" AbsoluteLayout.LayoutFlags="XProportional,YProportional" />
唯一稍有不同的是 xmlns 步骤:我无法设置教程中指定的 xmlns 属性,因为我已经将其设置为另一个值,以使用自定义呈现器在我的应用程序中显示 AdMob 广告(我遵循了本教程)。 但在Android上似乎不是问题。
我以编程方式设置图像的资源:
ChordStatusImage.Source = ImageSource.FromResource("PianoTraining.assets.images.wrongChord.png");
问题是我的图像从未显示在 iOS 上,无法弄清楚原因。
[编辑] 关于我如何设置源的精确度
加载图像的页面称为PianoTrainingPage
所以我有一个名为PianoTrainingPage
的类。 显示的图像应根据是否检测到和弦而改变,并调用一个函数来加载正确的图像。 但是因为没有显示图像,我只在该函数中以编程方式设置了一个图像以进行测试。
我测试了几次对ImageRessource.FromRessource
调用,但没有一个主题解决了我的问题:
ChordStatusImage.Source = ImageSource.FromResource("PianoTraining.assets.images.wrongChord.png",typeof(ImageResourceExtension).GetTypeInfo().Assembly);
(教程中的那个)-->图像在Andrid上显示但在ios上不显示ChordStatusImage.Source = ImageSource.FromResource("PianoTraining.assets.images.wrongChord.png",typeof(PianoTrainingPage).GetTypeInfo().Assembly);
(因为我认为可能是我给 typeof 错误的类)--> 图像显示在 Android 上,但不在 ios 上ChordStatusImage.Source = ImageSource.FromResource("PianoTraining.assets.images.wrongChord.png");
(第二个参数使用默认值) --> 图像在Android上显示但在ios上不显示在我的代码中,我使用了第三个版本,因为它是我测试的最后一个版本
正如 Jason 和 ToolmakerSteve 在评论中提到的,有两种方法可以解决这个问题。
为您的命名空间添加另一个name
,允许添加具有不同名称的相同命名空间。
xmlns:a="clr-namespace:PianoTraining"
xmlns:b="clr-namespace:PianoTraining"
xmlns:c="clr-namespace:PianoTraining"
然后设置对类ImageResourceExtension
的引用,比如
<Image Source="{a:ImageResource PianoTraining.assets.images.wrongChord.png}" />
只需提供包含在当前程序集中的任何类,如ImageResourceExtension
。
ChordStatusImage.Source = ImageSource.FromResource("PianoTraining.assets.images.wrongChord.png",typeof(ImageResourceExtension ).GetTypeInfo().Assembly);
事实证明,我从一开始就做得很好,使用typeof
值,但由于某种原因,我的 mac 麦克风的数据没有提供给 ios 模拟器。 我重新编译了我的绑定库,现在一切正常。
感谢您的帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.