Xamarin:如何从iOS库项目加载图像

我有一个用MvvmCross设计的Xamarin项目。 有子项目:

  • 核心(PCL)
  • ViewModel(PCL)
  • iOS(可执行文件)

如果我将图像添加到我的iOS项目(Resoureces / Images / test_image.png),那么我可以使用以下代码加载它:

UIImage image = UIImage.FromBundle("Images/test_icon.png"); 

现在,我想使用一个新的子项目

  • 控件(iOS库)

该库应该加载图像。 我在Controls(Resoureces / Images / test_image.png)中添加了一个图像

但我无法在Controls proj中加载此图像。

我的问题:如何从iOS库加载图像?

  public class MyButton : UIButton { public MyButton () : base() { Initialize (); } void Initialize() { // load image from bundle UIImage image = UIImage.FromBundle("Images/test_icon.png"); // image is null this.SetImage (image, UIControlState.Normal); } } 

而ViewController类是:

  public partial class FirstView : MvxViewController { public FirstView () : base ("FirstView", null) { } public override void ViewDidLoad () { base.ViewDidLoad (); // load image from bundle // UIImage image = UIImage.FromBundle("Images/test_icon.png"); // image is not null if added in iOS Proj // this.imageView.Image = image; MyButton button = new MyButton (); View.Add (button); View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Right, NSLayoutRelation.Equal, View, NSLayoutAttribute.Right, 1, 10)); View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Top, NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1, 74)); View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Width, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0, 64)); View.AddConstraint (NSLayoutConstraint.Create (button, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0, 64)); } } 

在此处输入图像描述

这是完整的项目: https : //bitbucket.org/ww_wschaefer/xamarin-first-crossover-app/overview

对我的评论有点解释。

你必须改变

 UIImage image = UIImage.FromBundle("Images/test_icon.png"); 

 UIImage image = UIImage.FromFile("Images/test_icon.png"); 

由于图像未添加为捆绑资源。

UIImage.FromFile()方法异步加载图像。 它还允许应用程序从外部位置加载图像

UIImage.FromFile()方法不同, UIImage.FromBundle()方法是一个阻塞调用, 只加载应用程序包中的图像 。 但是,它会在加载后缓存图像。

为了进一步了解,请查看本书 – 使用MonoTouch为iPhone和iPad开发C#应用程序