Xamarin.Forms Xaml背景图片

时间:2016-08-22 23:20:54

标签: xaml xamarin xamarin.android xamarin.forms xamarin-studio

我刚刚开始使用Xamarin.Forms应用程序,我想在我的XAML中添加背景图像。 我添加了属性,但是当我运行它时它不会出现!! 这是图像。

APP

public class App : Application
{
    public App()
    {
        // The root page of your application
        MainPage = new Page();
    }

XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="App1.Page"
         BackgroundImage="bg.png">

enter image description here

那么,我该如何解决?

enter image description here

6 个答案:

答案 0 :(得分:6)

在每个原生项目中添加bg.png文件,因为您当前正在使用Android模拟器开始使用Xamarin.Android项目:

  

Android - 使用Build Action将图像放在 Resources / drawable 目录中:AndroidResource

参考:https://developer.xamarin.com/guides/xamarin-forms/working-with/images/

示例:在您的Xamarin.Android项目中,添加bg.png,如下所示:

enter image description here

检查该图片的Build Action并确保其已分配AndroidResource。重建并重新测试。

答案 1 :(得分:3)

在Xamarin.forms

  1. 图像应放在以下文件夹中

       iOS, Android  - Resources folder 
    
       Windows/UWP, Windows Phone  - Assets folder 
    
  2. 然后应更改图像的构建操作(rt click img-&gt;属性),如下所示

    iOS - BundleResource             Windows Phone - Content
    
    Android - AndroidResource        Windows/UWP - Content
    
  3. 如果仍未显示图像,请尝试将图像属性

    中的复制到输出目录更改为更新

答案 2 :(得分:1)

如果要在XamaL项目中为整个页面添加XAML文件中的背景图像,请使用BackgroundImage属性并将您的图像添加到Resources项目下的Android项目中。 drawable文件夹和iOS Resources文件夹。

@section scripts{
    <script>
        function showCal() {
                       id = $('#EmployeeId').val();
                       if (id == null)
// tackle the checks for different IDs here right now id is null and current empID's record is shown
                            id = @Session["currentEmpID"].ToString();
else
{
//fetch the id from ddshowMembers here, the if() part is running in all conditions.
}

答案 3 :(得分:0)

图像文件可以添加到每个应用程序项目中,并从Xamarin.Forms共享代码中引用。要在所有应用程序中使用单个图像,必须在每个平台上使用相同的文件名,并且它应该是有效的Android资源名称(即,只允许使用小写字母,数字,下划线和句点)。

  • iOS - 使用Build Action:BundleResource将图像放在Resources文件夹中。还应提供图像的Retina版本 - 分辨率的两倍和三倍,文件扩展名前的文件名后缀为@ 2x或@ 3x(例如myimage@2x.png)。
  • Android - 使用Build Action:AndroidResource将图像放在Resources / drawable目录中。还可以提供图像的高DPI和低DPI版本(在适当命名的Resources子目录中,例如drawable-ldpi,drawable-hdpi和drawable-xhdpi)。
  • Windows Phone - 使用Build Action:Content。将图像放在应用程序的根目录中。
  • Windows / UWP - 使用Build Action:Content。将图像放在应用程序的根目录中。

您可以在Working with Images Loading and displaying images in Xamarin.Forms

了解更多信息

答案 4 :(得分:0)

缩小图像的大小。

答案 5 :(得分:0)

您可以实现此目的的另一种方式(source)是将图像的构建操作(在文件属性中)设置为嵌入式资源。

然后,使用转换器标记扩展,您将能够直接在XAML中使用它,并且不必复制或链接每个平台特定项目中的文件。

这是您应该添加到便携式项目中的转换器:

[ContentProperty(nameof(Source))]
public class ImageResourceExtension : IMarkupExtension
{
  static readonly Assembly CurrentAssembly = 
    typeof(ImageResourceExtension).GetType().Assembly;

  public const string Assets = nameof(Assets);

  public string Source { get; set; }

  public object ProvideValue(IServiceProvider serviceProvider)
  {
    if (string.IsNullOrWhiteSpace(Source))
      return null;

    // Do your translation lookup here, using whatever method you require            
    var source = $"{CurrentAssembly.GetName().Name}.{Assets}.{Source}";

    var imageSource = ImageSource.FromResource(source, CurrentAssembly);

    return imageSource;
  }
}

然后在你的XAML中:

<?xml version="1.0" encoding="UTF-8" ?>
<ContentPage
   xmlns="http://xamarin.com/schemas/2014/forms"
   xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
   xmlns:local="clr-namespace:WorkingWithImages;assembly=WorkingWithImages"
   x:Class="WorkingWithImages.EmbeddedImagesXaml">
  <Image Source="{local:ImageResource Background.jpg}"}
</ContentPage>