Xamarin.form使用嵌入式图像

时间:2018-04-19 23:49:45

标签: c# image xaml xamarin.forms

我想在便携式代码中使用嵌入式图像。我正在使用标记扩展,因为许多不同的视频和指南已经显示。我的项目编译并运行但没有显示图像。这些指南说将图像放在"参考文献"但我无法在那里拖动图像或右键单击并添加一个图像,因此它们位于名为Images的文件夹中。如果问题是他们没有被引用,那么我该如何获得它们呢?否则,任何人都可以发现非常感激的错误。

https://www.c-sharpcorner.com/article/add-images-icons-and-splash-screen-in-xamarin-forms/

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/images?tabs=vswin

About.xaml.cs:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace SVCAPB
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class About : ContentPage
    {
        public About()
        {
            InitializeComponent();
            Image embeddedImage = new Image { Source = ImageSource.FromResource("SVCAPB.Images.apbLeaders.jpg") };
        }
    }
}

About.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:SVCAPB.MarkupExtensions"
             x:Class="SVCAPB.About"
             Title="About">
    <ContentPage.Content>
        <ScrollView>
            <StackLayout
            HorizontalOptions="Fill"
            VerticalOptions="Fill"
                BackgroundColor="#FFC107">
                <Image Source="{local:EmbeddedImage ResourceId=SVCAPB.Images.apbLeaders.jpg }"></Image>
            </StackLayout>
            </ScrollView>
    </ContentPage.Content>
</ContentPage>

EmbeddedImage.cs(在MarkupExtensions文件夹下):

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace SVCAPB.MarkupExtensions
{
    public class EmbeddedImage : IMarkupExtension
    {
        public string ResourceId
        {
            get;
            set;
        }
        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (String.IsNullOrWhiteSpace(ResourceId)) return null;
            return ImageSource.FromResource(ResourceId);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码是正确的,问题在于添加图像或类的引用

1.右键单击Images文件夹 - &gt;添加 - &GT;添加文件 - &gt;选择你的形象 2.-此步骤是必要的,因为它在文档中标记      - 如果您正在使用Xamarin工作室,请右键单击图像 - &gt;构建行动 - &gt; EmbeddedResource      - 如果您使用Visual Studio右键单击 - &gt;属性 - &gt;构建行动 - &gt; EmbeddedResource

如果你使用的是Xamarin studio,你只需要xmlns:local =“clr-namespace:SVCAPB” 如果您使用的是Visual Studio,则需要指定目录xmlns:local =“clr-namespace:SVCAPB.MarkupExtensions”