Xamarin如何仅通过XAML为ContentPage设置本地资源背景图
解决步骤
1. 按平台规则存放并配置图片属性
你当前写法不生效的核心原因是Xamarin.Forms各平台对本地图片资源的存放规则、生成操作配置有固定要求,不能直接在共享项目写相对路径调用,需要分别放到各平台对应的资源目录,同时配置正确的生成操作:
- Android平台:将
background.png放入Android项目的Resources/drawable目录,右键文件打开属性,将「生成操作」设置为AndroidResource。注意:Android资源文件名只能包含小写字母、数字、下划线和点,不能出现大写字母和特殊符号 - iOS平台:将
background.png放入iOS项目的Resources目录,右键文件打开属性,将「生成操作」设置为BundleResource。如果需要适配不同分辨率的屏幕,可同时准备background@2x.png、background@3x.png的同命名文件一起放入该目录 - Windows(UWP)平台:将
background.png放入UWP项目的Assets目录,右键文件打开属性,将「生成操作」设置为Content
2. 修改XAML代码
配置完资源后,XAML中直接填写图片文件名即可,平台会自动匹配对应目录下的资源,修改后代码如下:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="SuperForms.Samples.Page1"> <ContentView> <!-- 不需要加路径前缀,直接写文件名 --> <Image Source="background.png" Aspect="AspectFill" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/> <!-- 页面其他业务内容放在Image节点之后,才能显示在背景图上层 --> </ContentView> </ContentPage>
可选:共享项目内嵌资源方案(仅放一份图片)
如果你不想每个平台都单独存一份图片,可以直接把图片放到共享项目的Image目录下,右键文件将「生成操作」设置为EmbeddedResource,XAML中按如下格式引用即可,不需要额外写C#代码:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:SuperForms.Samples" x:Class="SuperForms.Samples.Page1"> <ContentView> <Image Source="{local:ImageResource SuperForms.Image.background.png}" Aspect="AspectFill" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/> </ContentView> </ContentPage>
注意:
local:ImageResource后面的参数格式为「共享项目默认命名空间.文件夹名.文件名」,如果你的共享项目默认命名空间不是SuperForms,替换成你自己的命名空间即可。
内容的提问来源于stack exchange,提问作者WStar
相关产品推荐
相关产品推荐

