2016-09-22 12 views
0

Common Assemblyの下にImageResourceExtensionクラスを作成しました。私は、[プロパティの参照]ウィンドウの設定で名前を確認しました。この拡張のネームスペースはExtension.Commonです。Xamarinフォーム:カスタム拡張が見つかりません

xmlns:common="clr-namespace:Extension.Common;assembly:Common" 

要素が書かれていたとして:

<common:BooleanToObjectConverter x:Key="boolToStyleImage" 
               x:TypeArguments="Style"> 
     <common:BooleanToObjectConverter.FalseObject> 
      <Style TargetType="Image"> 
      <Setter Property="HeightRequest" Value="20" /> 
      <Setter Property="Source" Value="{common:ImageResource Common.Images.error.png}" /> 
      </Style> 
     </common:BooleanToObjectConverter.FalseObject> 

画像は内部の一般的なプロジェクトフォルダに格納されていたよう

この共通のアセンブリを使用した作業プロジェクトのXAMLは、宣言を持っています画像ディレクトリ

ImageResourceファイルをImageResourceExtension.csという名前でImageResource.csを試しましたが、動作しませんでした。共通見つかりません

MarkupExtension:ImageResource

を私が間違って行く何見当がつかないそれだけ言って私に例外を与えます。ブログのすべての手順に従ってください。

これらのxamlを配置したプロジェクトは、共有プロジェクトにあります。どんな違いがあるか分かりません

答えて

1

私はあなたの質問をよく理解してくれることを願っています!

このコードを見て:あなたはあなたのXAMLで行ったように画像を使用したい場合は今

[ContentProperty("Source")] 
public class ImageSourceExtension : 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("Project.Images." + Source); 

     return imageSource; 
    } 
} 

、そのようなことは動作するはずです:

<Image Source="{extension:ImageSource LogoProject.png}"/> 

注1:拡張子が自動的に入力されるため、画像の名前のみを入力します)

注2:あなたは、私がそうであるように、以下のアセンブリ/名前空間を配置する必要があります:

xmlns:extension="clr-namespace:Project.Sources.Extensions;assembly=Project" 

はまた、あなたがイメージしているが、EmbeddedResourceにする必要があり、それを忘れないでください。パスについては、それは組み立てだけでなくProject.Path.Image.pngとではありません;)

私は私はあなたの質問を理解し、私はあなたを助けることができる願っています:)

+1

ニース説明できるよう..私はもう私の機能でこのように使用しないでください簡単にテストできますが、依然として非常に便利です。ありがとうございました – LittleFunny

関連する問題