2017-06-08 9 views
0

次の構造を持つXamarinベースのVisual Studio 2015プロジェクトがあります。iOS + Droidプロジェクト間でアセット/リソースを共有できますか?

のMyApp(ポータブル) MyApp.Droid MyApp.iOS

現在、私はMyApp.Droidプロジェクト MyApp.iOSプロジェクトにおける資産/リソースを含めます。

そうはたとえばmyhtml.htmlため

MyApp.Droid /アサート/ myhtml.htmlとMyApp.iOS両方/リソース/ myhtml.htmlとしてを重複している私は、この重複を避けることができます任意の方法はありますか?

答えて

2

Xamarinフォームを使用しているとします。はい.netリソースファイルを使用できます。

ポータブルプロジェクトにフォルダを作成し、そこにコンテンツファイルを追加し、すべてのコンパイルアクションを埋め込みリソースに設定すると、.net提供されたメカニズムを使用してリソースにアクセスできます私は、コードを想定し、この例では)、ポータブルプロジェクトに含まれるクラスで実行されているとファイルがResourceFilesという名前のフォルダに格納されています。

var htmlFile = this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream("MyNamespace.ResourceFiles.myhtml.html"); 

あなたは、ファイルの内容と流れを持ってこのように。使用するには、次に

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

    public object ProvideValue (IServiceProvider serviceProvider) 
    { 
     if (Source == null) 
      return null; 

     var imageSource = new StreamImageSource { Stream = async (ct) => this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream(Source) }; 

     return imageSource; 
    } 
} 

また、ヒントとして、カスタムマークアップ拡張機能を使用してXAMLからこれらのファイルを読み込むことができ、一例ごとに、ここではマークアップ拡張機能は、.NETリソースから画像をロードすることですXAMLのこの拡張機能を使用します(ローカルは独自の名前空間のXAML名前空間定義です)。

<Image Source="{local:ImageResource MyNamespace.ResourceFiles.MyImage.png}" /> 
関連する問題