2016-05-10 9 views
1

画像は名前がfb.pngであり、ルートプロジェクト(prtable)にあり、この画像をDroidプロジェクトのResource>drawbleに追加します。画像はXamarin.forms(PCL)に表示されません

Thees私MainPage.xamlコードです:

<Image x:Name="img1"></Image> 

そしてTheesは私MainPage.xaml.csコードです:

public MainPage() 
    { 
     InitializeComponent(); 

     ImageSource img = ImageSource.FromResource("App2.fb.png"); 
     img1.Source = img; 
     img1.Aspect = Aspect.AspectFit; 
     img1.BackgroundColor = Color.Navy; 

    } 

何が変わったが、その画像が登場するだろう必要があるのですか?

+0

あなたのイメージがfb.pngと呼ばれていると言うが、あなたのコードの中であなたがいますそれを "App2.fb.png"と呼ぶ。あなたはImageSource.FromResourceで "fb.png"を使用する必要があります –

答えて

2

ファイルはリソース/ Drawableのディレクトリに保存されている場合は、FROMFILE、ないFromResourceを使用しています。 FromResourceは、ビルドされたライブラリの組み込みリソースとしてパッケージ化されたイメージに使用されます。

ます。また、それはリソース/ Drawableの中に表示されるファイルの正確な名前を指定する必要があるので、これはそれを行う必要があります。

public MainPage() 
{ 
    InitializeComponent(); 

    ImageSource img = ImageSource.FromFile("fb.png"); 
    img1.Source = img; 
    img1.Aspect = Aspect.AspectFit; 
    img1.BackgroundColor = Color.Navy; 

} 
+0

残念ながら、それは動作しません。 – distance

+1

他にも試してみてください:あなたのAndroidプロジェクトのResources/drawableにあるfb.pngにAndroidResourceのBuildActionがあることを確認してください。コンテナビューが問題を引き起こしている可能性があるため、MainPage.xamlファイル全体を投稿してください。そして、それが意味することについてより具体的に「それは働かない」。画像が表示されないのですか?それはクラッシュしていますか? – DavidS

+0

'buildAction'を' content'から 'AndroidResource'に設定し、画像が表示されています。 – distance

0

ここでは、MVVMにバインドされた画像リソースをImageコントロールに完全に実装しています。 XAMLがあるページのコンテキストとしてviewmodelを設定する必要があります。また、 "App2.fb.png"としてアクセスすると奇妙に思えますが、それはfb.pngだけでなければなりません。それは資源が

XAML

<Image 
Aspect="AspectFit" 
Source="{Binding PropertyImageStatusSource}"> 

ベースのViewModel

があなたを持っている>ドロイドに記載されているだけで、画像の正確な名前に映像ソースの名前を変更...シンプルな修正であるかもしれませんviewmodelsはビューモデル基本クラスを継承しているので、INotifyPropertyChangedはあなたのアクセサ上で普遍的に実装されています。

public class _ViewModel_Base : INotifyPropertyChanged 
    { 


     //figure out what is getting set 
     public virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null) 
     { 
      if (Object.Equals(storage, value)) 
       return false; 

      storage = value; 
      OnPropertyChanged(propertyName); 



      return true; 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     //attach handler with property name args to changing property, overridable in inheriting classes if something else needs to happen on property changed 
     protected virtual void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 

      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
    } 
} 

のViewModel

Public MyViewModel : _ViewModel_Base 
{ 
    private string ImageStatusSource = "fb.png"; 
    public string PropertyImageStatusSource 
    { 
     set { SetProperty(ref ImageStatusSource, value); } 
     get { return ImageStatusSource; } 
    } 

} 
+0

残念ながら、それは動作しません。私は 'public MainPage()'メソッドの上にcodeBehindを置いていますか? – distance

+0

私はそれが実際にリソースの名前を付ける方法かもしれないと思います。反映するように更新された答え。 –

+0

願っている人は、なぜ彼らが投票しないのかと言うだろう。プロパティーの変更された基本ビューモデルのメソッドはテキストブックMVVM Xamarinです。ビューモデルは、バインドするカプセル化プロパティを設定するだけです。このアプローチは私自身のエンタープライズアプリケーションで使用され、https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/にあります。私はいつも話し合いを開いています。それにはアプローチするより良い方法があれば、説明なしで投票するのではなく、そう言います。 –

関連する問題