在Xamarin.Forms中使用带有嵌入图像的Icon属性

时间:2016-03-01 15:02:35

标签: c# ios xamarin xamarin.ios xamarin.forms

我正在处理shared project并且我实施了Master Detail Page。现在我将一个图像添加到共享项目(又名embedded image)。图像的构建操作是嵌入式资源,我遵循将命名空间(HelloForms)和子文件夹(Ressources)考虑在内的建议。结果应如下:

http://www.xforms-kickstarter.com/SlideOutMenu/screenshot-menu.png

正如您所见,leftBarButtonItem是通过Icon属性设置的。我尝试设置Icon属性,如下所示:

Icon = Device.OS == TargetPlatform.iOS ? "HelloForms.Ressources.menu.png" : null;

Icon = new FileImageSource { File = "HelloForms.Ressources.menu.png" };

目前,我显示的是 Master 页面的标题,而不是Icon。为了让这个工作,我需要改变什么?我对嵌入图片的解决方案感兴趣,而对本地图片的解决方案感兴趣。

2 个答案:

答案 0 :(得分:3)

您的代码错误,您想使用ImageSource.FromResource,它是为此明确创建的:

Icon = ImageSource.FromResource("HelloForms.Ressources.menu.png");

修改

Icon是FileStream,因此无法使用ImageSource。此外,Xamarin有充分理由这样做,该文件将用于代表Android桌面上的应用程序,因此它必须可由系统访问,并且嵌入的资源不能像资源文件中那样。

“嵌入式资源”在这里引起混淆,在iOS项目上,Xamarin将默认的“内容”操作更改为“嵌入式资源”,这导致认为它嵌入在.net程序集中,但不是,它被复制到项目中

只需将文件作为资源添加到iOS / Android项目中,然后直接使用文件名。

答案 1 :(得分:0)

menu.png 已添加到共享项目中,这是错误的。将它添加到iOS项目的资源文件夹( Build Action = BundleResource )似乎可以解决问题。那你只需要这段代码

Icon = Device.OS == TargetPlatform.iOS ? "menu.png" : null;

让它发挥作用。似乎我误解了嵌入式图像