2017-07-14 128 views
1

圖片我想在我的解決方案上傳共享項目內部的圖像,使得Android和iOS的項目可以通過XAML中正常使用。不工作,我不知道爲什麼。任何人都可以解釋爲什麼它不工作?Xamarin形式共享項目,Android和iOS

擴展:

[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作爲文檔指示。

+0

你能展示你的項目結構嗎?這張圖片的位置在哪裏?它是共享項目中的資產文件夾嗎? –

+0

如果你不需要基於設備的不同尺寸的圖像,我建議你使用嵌入式圖像。如果您需要不同的尺寸,則需要使用項目特定的文件夾。請在這裏更好地閱讀並提出您的問題。 https://developer.xamarin.com/guides/xamarin-forms/user-interface/images/ – batmaci

回答

2

FromResource被參照Android或iOS項目不是共享一個。這些圖像需要位於平臺特定項目的相應文件夾中。

+0

好的,但是使用共享的正確方法是什麼? –

1

勿使用延長。有更簡單的方法。

根據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 
    } 
} 
下面

是項目結構

enter image description here

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

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

enter image description here

關鍵是要添加到您的PCL你在哪裏打電話FromResource您的共享項目的參考。共享的項目被注入到PCL 然後在我的項目結構是

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

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

如果沒有適合你使用的後續代碼找到你資源。在您使用System.Reflection調用FromResource add的文件中;然後添加如下代碼

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」

+0

@LuizNegrini沒有爲你工作? –