簡體   English   中英

Xamarin與Android和iOS的圖像形成共享項目

[英]Xamarin forms shared project with images for Android and iOS

我正在嘗試在解決方案中的“共享”項目中上載圖像,以便Android和iOS項目可以通過Xaml正常使用它。 不工作,不知道為什么。 誰能解釋為什么它不起作用?

延期:

[ContentProperty("Source")]
    public class ImageResourceExtension : IMarkupExtension
    {
        public string Source { get; set; }

        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (Source == null)
            {
                return null;
            }
            // Do your translation lookup here, using whatever method you require
            var imageSource = ImageSource.FromResource(Source);

            return imageSource;
        }
    }

Xaml:

<Image Source="{extensions:ImageResource MyProject.Assets.fechar.png}" HorizontalOptions="Start" HeightRequest="16" Focused="Image_Focused" BackgroundColor="Red" WidthRequest="15" />

在擴展中放置一個斷點,對於我列表中的每個項目,它通常會在此停一次。

我也嘗試過僅在代碼后面插入硬編碼綁定以進行測試,並且使用ImageSource.FromResource也無法正常工作。

圖像文件如文檔所示為EmbbedResource。

FromResource是指Android或iOS項目,而不是共享項目。 映像必須位於平台特定項目的相應文件夾中。

不要使用擴展名。 有更簡單的方法。

根據Xamarin的說法:“當前沒有針對資源標識符的隱式轉換,您必須使用ImageSource.FromResource”和“由於沒有從字符串到ResourceImageSource的內置類型轉換器,因此Xaml無法本地加載這些類型的圖像”。 因此,您不能在xaml中指定共享圖像,但可以使用后面的代碼綁定共享圖像。

在xaml中:

<Image Source="{Binding Image}" HorizontalOptions="Start" WidthRequest="80"/>

然后在后面的代碼中

public ImageSource Image
{
    get
    {
        return ImageSource.FromResource("ButtonRendererDemo.Resources.icon1.png"); //from PCL
    }
}

以下是項目結構

在此處輸入圖片說明

///////////////////////////////////////////////////// ////////////////

經過共享項目測試。 下面是結構

在此處輸入圖片說明

關鍵是將共享項目的引用添加到調用FromResource的PCL中。 共享項目被注入PCL,然后在我的項目結構中

public ImageSource Image
        {
            get
            {
                //return ImageSource.FromResource("ButtonRendererDemo.Resources.icon1.png"); //from PCL
                return ImageSource.FromResource("ButtonRendererDemo.Pictures.icon1.png"); //from Shared
            }
        }

///////////////////////////////////////////////////// ////////////

如果沒有任何效果,請使用以下代碼查找資源。 在調用FromResource的文件中,使用System.Reflection添加; 然后添加以下代碼

    var assembly = typeof(App).GetTypeInfo().Assembly;
    foreach (var res in assembly.GetManifestResourceNames())
    {
        System.Diagnostics.Debug.WriteLine("found resource: " + res);
    }

您應該在“輸出”窗口中看到類似

找到的資源:someNamespace.Pictures.icon1.png-這是您需要使用的資源。

您沒有回答我有關項目結構的問題。 那我可以給你一個確切的答案。 我懷疑您的圖像路徑為“ MyProject.Droid.Assets.fechar.png”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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