Xamarin表示背景图像不起作用

时间:2017-09-27 07:00:36

标签: xamarin xamarin.ios xamarin.forms xamarin.android

我正在开发Xamarin表单,跨平台应用程序(Android和iOS)。我想要登录表单的背景图片。

我在表单的构造函数上设置它,代码是:

this.BackgroundImage = ImageSource.FromResource("PCLProjectName.Images.Login.loginbackground.png").ToString();

Image在PCL项目中,我已将其action属性设置为Embedded resource

PCL项目文件夹层次结构如下

Root
 - Images
    - Login
       -loginbackground.png

图片未显示

3 个答案:

答案 0 :(得分:0)

要使图像生效,必须将它们放在iOSandroid的不同文件夹中。据我所知,不能使用子文件夹或自定义文件结构。

对于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); }