![](/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.