图片没有在Xamarin.forms(PCL)中显示

时间:2016-05-10 15:04:15

标签: xaml xamarin xamarin.forms

我有一个名为fb.png的图像,它位于根项目(prtable)中,我将此图像添加到Droid项目中的Resource>drawble

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;

     }

图像出现后需要改变什么?

2 个答案:

答案 0 :(得分:2)

如果文件保存在Resources / Drawable目录中,则使用FromFile,而不是FromResource。 FromResource用于在构建的库中打包为嵌入资源的映像。

您还需要在Resources / Drawable中指定文件的确切名称,因此应该这样做:

public MainPage()
{
    InitializeComponent();

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

 }

答案 1 :(得分:0)

这是MVVM绑定图像资源到Image控件的完整实现。您需要将viewmodel设置为XAML所在页面的上下文。另外作为“App2.fb.png”访问似乎很奇怪,它应该只是fb.png。这可能是一个更简单的修复..只需将图像源重命名为Droid&gt;中列出的图像的确切名称。资源

<强> XAML

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

基本ViewModel

让您的viewmodel继承自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));
            }
        }
    }
}

ViewModel

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

}