2016-05-10 57 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 –

回答

2

如果文件被保存在資源/繪製對象目錄,然後使用FROMFILE,不FromResource。 FromResource用於在打包的庫中打包爲嵌入式資源的圖像。

你也需要,因爲它出現在資源/可繪製到指定文件的確切名稱,所以這個應該這樣做:

public MainPage() 
{ 
    InitializeComponent(); 

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

} 
+0

不幸的是它不起作用。 – distance

+1

其他要嘗試的事情:確保Resources/drawable中Android項目中的fb.png具有AndroidResource的BuildAction。然後發佈整個MainPage.xaml文件,因爲容器視圖可能會導致問題。更具體地說,你的意思是「它不起作用」。圖像沒有顯示出來嗎?它崩潰了? – DavidS

+0

我將'buildAction'從'content'設置爲'AndroidResource'並且圖像顯示出來。 – distance

0

這裏是MVVM綁定圖像資源到圖像控件的完整實現。您需要將您的視圖模型設置爲XAML所在頁面的上下文。另外訪問「App2.fb.png」似乎很奇怪,它應該只是fb.png。這可能是一個簡單的修復..只是重命名圖像源的圖像的確切名稱的Droid>資源

XAML上市

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

基本視圖模型

有你viewmodels從viewmodel基類繼承,因此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)); 
      } 
     } 
    } 
} 

視圖模型

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

} 
+0

中使用「fb.png」。不幸的是,它不起作用。我已經把上面的codeBehind放在'public MainPage()'方法中了? – distance

+0

我認爲這實際上可能是您命名資源的方式。更新的答案反映。 –

+0

希望人們會說爲什麼他們投票。改變基本視圖模型方法的屬性是教科書MVVM Xamarin。視圖模型不做任何事情,而是設置要綁定的封裝屬性。這種方法用於我自己的企業應用程序,可以在https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/中找到;如果有更好的方式來對待它,我總是願意討論,而不是沒有解釋的投票。 –