簡體   English   中英

Xamarin.forms 嵌入圖像未在 iOS 上顯示

[英]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 在評論中提到的,有兩種方法可以解決這個問題。

xml

為您的命名空間添加另一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM