我正在开发Xamarin表单,跨平台应用程序(Android和iOS)。我想要登录表单的背景图片。
我在表单的构造函数上设置它,代码是:
this.BackgroundImage = ImageSource.FromResource("PCLProjectName.Images.Login.loginbackground.png").ToString();
Image在PCL项目中,我已将其action属性设置为Embedded resource
。
PCL项目文件夹层次结构如下
Root
- Images
- Login
-loginbackground.png
图片未显示
答案 0 :(得分:0)
要使图像生效,必须将它们放在iOS
和android
的不同文件夹中。据我所知,不能使用子文件夹或自定义文件结构。
对于Android设备,图片必须位于Android>Resources>Drawable
下的Android项目中。构建操作设置为Android Resource
(此文件夹应该已存在)
对于iOS设备,图片必须位于iOS项目文件夹iOS>Resources
中。构建操作设置为Bundle Resource
(此文件夹也应该已存在)
使用相应文件夹中的图像,您可以像这样设置图像。
this.BackgroundImage = ImageSource.FromFile("loginbackground.png")
编辑:继续使用PCL嵌入式资源方法..
您可以在某处运行此代码,以查看在资源中正确检测到的图像。我从经验中知道有一些奇怪的文件命名问题(虽然我没有看到我在你的例子中遇到的任何问题)
var assembly = typeof(EmbeddedImages).GetTypeInfo().Assembly;
foreach (var res in assembly.GetManifestResourceNames())
System.Diagnostics.Debug.WriteLine("found resource: " + res);
答案 1 :(得分:0)
如果要在XamaL项目中为整个页面添加XAML文件中的背景图像,请使用BackgroundImage属性并将您的图像添加到Resources项目下的Android项目中。 drawable文件夹和iOS Resources文件夹。
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:PhoneDailerDemo"
x:Class="PhoneDailerDemo.MainPage"
BackgroundImage="image3.jpg">
<Label Text="Welcome to Xamarin Forms!"
VerticalOptions="Center"
HorizontalOptions="Center" />
<StackLayout Padding="100">
//..........
</StackLayout>
</ContentPage>
答案 2 :(得分:0)
Xamarin不允许您将外部存储或Url中的图像用作ContentPage的背景图像。 因此,与其在页面(ContentPage)的根标记内设置BackgroundImage =“ image_name_in_resources”,而不是将其放置在代码内与您相邻的Image标记内,它们都在 AbsoluteLayout 内 这是我的代码的片段
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
.....
.....>
<AbsoluteLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Image x:Name="imageBG" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" Aspect="AspectFill" Source="myimage.jpg" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/>
<StackLayout AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" >
....
</StackLayout>
</AbsoluteLayout>
要更改源教授CS代码,这是我使用的一些代码段
string serverAdress = Constants.HTTP_PRE + Constants.SERVER_IP;
Logo.Source = new UriImageSource
{
Uri = new Uri(serverAdress + Constants.HEADER_IMAGE),
CachingEnabled = true
};
要更好地控制服务器响应是否有效...
try
{
string url = Constants.HTTP_PRE + DependencyService.Get<IStoredData>().GetData(Constants.SHARED_PREF_ADDRESS);
url += Constants.HEADER_IMAGE;
HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(url);
//You should be getting only the response header
wrq.Method = "HEAD";
if ( ( (HttpWebResponse)wrq.GetResponse() ).ContentLength > 0) // if filePath is correct - serverIP is set
{
Uri uri = new Uri(url);
UriImageSource uriImageSource = new UriImageSource { Uri = uri, CachingEnabled = true };
Logo.Source = uriImageSource;
}
}catch (Exception e) { System.Console.WriteLine(e.StackTrace); }