2017-07-14 4 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

プロジェクトの構造を表示できますか?この画像はどこにありますか?共有プロジェクトのAssetsフォルダですか? –

+0

デバイスに基づいてさまざまなサイズのイメージを必要としない場合は、埋め込みイメージを使用することをお勧めします。異なるサイズが必要な場合は、プロジェクト固有のフォルダを使用する必要があります。ここでそれをよく読んで、あなたの質問をしてください。 https://developer.xamarin.com/guides/xamarin-forms/user-interface/images/ – batmaci

答えて

2

FromResourceは、共有されていないAndroidまたはiOSプロジェクトを指しています。画像は、プラットフォーム固有のプロジェクトの適切なフォルダにある必要があります。

+0

さて、共有を使うための適切な方法は何でしょうか? –

1

拡張子は使用しないでください。はるかに簡単な方法があります。

「現在、リソース識別子の暗黙的な変換はありません.ImageSource.FromResourceを使用する必要があります」および「文字列からResourceImageSourceへの組み込み型コンバータがないため、これらのタイプのイメージをネイティブにロードできません。 Xaml "と呼ばれる。 xamlでは画像が共有されていると指定することはできませんが、コードを使って共有画像をバインドすることができます。 XAMLで

:以下

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

後ろコードに続い

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

プロジェクト構造

enter image description here

ある/////////// ///////////////////////////////////////////////////////////////// /////

共有プロジェクトでテスト済みです。以下は

enter image description here

キーはあなたがFromResourceを呼び出しているあなたのPCLに共有プロジェクトの参照を追加することである構造です。共有プロジェクトは、その後、私のプロジェクト構造では

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

あるPCL に注入します//////////////////////////// ///////////////////////

何も問題がなければ、次のコードを使用してリソース。 FromResourceを呼び出すファイルで、System.Reflectionを使用して追加します。 someNamespace.Pictures:その後、フォローコード

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

を追加[出力]ウィンドウに

見つかったリソースのようなものが表示されるはずです。icon1.png - それはあなたが必要とするリソースです。

プロジェクトの構成について私の質問にはお答えしていません。それから私はあなたに正確な答えを与えることができました。画像へのパスが "MyProject.Droid.Assets.fechar.png"であると思われます

+0

@LuizNegrini何もあなたのために働いたことはありませんか? –

関連する問題