Вставить изображение, не отображающееся в Xamarin.Forms

Jitendra спросил: 28 апреля 2018 в 08:27 в: visual-studio

У меня есть два изображения в папке "Изображения". Попытка загрузить эти изображения на страницу, но изображение не отображается на странице. Он не вызывает ошибок при отладке. Я проверяю Android-устройство Xamarin live player.

ImageResourceExtension.cs

    using System;
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;
    using Xamarin.Forms.Internals;    namespace Buffting
    {
        // You exclude the 'Extension' suffix when using in Xaml markup
        [Preserve(AllMembers = true)]
        [ContentProperty(nameof(Source))]
        public class ImageResourceExtension : IMarkupExtension
        {
            public string Source { get; set; }
            public object ProvideValue(IServiceProvider serviceProvider)
            {
                if (Source == null)
                    return null;
                // Do your translation lookup here, using whatever method you require
                var imageSource = ImageSource.FromResource(Source);
                return imageSource;
            }
        }
    }

BeautySalon.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:Buffting;assembly=Buffting"
             x:Class="Buffting.Home.BeautySalon"
             Title="Beauty Salon">
    <ContentPage.Content>
        <ListView  x:Name="SalonList" RowHeight="370">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Frame Margin="5,5,5,-5" OutlineColor="Blue" HasShadow="true">
                            <Grid>
                                <Grid Grid.Row="0">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="200"   />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <Image Grid.Row="0" Grid.ColumnSpan="2"  HeightRequest="200"  Source="{ Binding SalonImage}"  VerticalOptions="Fill"  Aspect="AspectFill"  />
                                </Grid>
                                <Grid Grid.Row="1" Padding="10">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <Label Grid.Row="1" Grid.Column="0" Margin="0, 40, 0, 0" Text="{ Binding SalonName }" FontSize="Large" TextColor="White" />
                                    <Image Grid.Row="1" Grid.Column="1" x:Name="Star" Source="{local:ImageResource Buffting.Images.star_outline.png}" />
                                </Grid>                                <Grid Grid.Row="2" Padding="0, 0, 10, 0">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="100" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <Label Grid.Row="0" Grid.Column="0" Text="Location:" FontAttributes="Bold" FontSize="Small" TextColor="Black" />
                                    <Label Grid.Row="0" Grid.Column="1" Text="{ Binding Location}"  />
                                    <Label Grid.Row="1" Grid.Column="0" Text="Full Address:" FontAttributes="Bold" FontSize="Small" TextColor="Black"  />
                                    <Label Grid.Row="1" Grid.Column="1" Text="{ Binding Address}"  />
                                    <Label Grid.Row="2" Grid.Column="0" Text="Phone:" FontAttributes="Bold" FontSize="Small" TextColor="Black"  />
                                    <Label Grid.Row="2" Grid.Column="1" Text="{ Binding Phone}"  />
                                    <Label Grid.Row="3" Grid.Column="0" Text="Opening Time:" FontAttributes="Bold" FontSize="Small" TextColor="Black"  />
                                    <Label Grid.Row="3" Grid.Column="1" Text="{ Binding OpeningTime}"  />
                                </Grid>
                            </Grid>
                        </Frame>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ContentPage.Content>
</ContentPage>

Я использую этот код, но изображение не загружается. Я ма, новый в Xamarin, пожалуйста, помогите мне.

3 ответа

Miguel Angel Muñoz ответил: 28 апреля 2018 в 09:47

Неправильно, изображения помещаются в каждый родной проект. Для Xamarin.Forms вы должны поместить изображения в папки Drawables.

Если ваш проект является android и ios, у вас, наконец, есть два изображения: один в iosproject / Resources и один в AndroidProject / Resources / Drawab.

см. Images Doc

Jitendra ответил: 28 апреля 2018 в 10:19
Спасибо за ваш ответ, но я не хочу размещать один и тот же файл в нескольких местах. Мы используем Xamarin Forms для совместного использования кода, так почему бы нам не поделиться файлами?
Rudy Spano ответил: 28 апреля 2018 в 01:08

Если вы хотите загрузить изображения из общей сборки. Убедитесь, что изображения установлены как "EmbeddedResource" (правый клик: свойства, действие сборки).

LeRoy ответил: 28 апреля 2018 в 02:35

Вы также добавляете каждое изображение в собственные проекты. вот пример того, как он должен выглядеть:

Вы можете использовать следующий плагин для создания ваших изображений для iOS:

Плагин: Link

Для Android :

Для IOS:

Теперь вы можете ссылаться на свои изображения в своем xaml:

<Image Source="star_outline.png" />
<Image Source="star_selected.png" />

UPDATE:

В вашем изменении xaml:

<Image Grid.Row="1" Grid.Column="1" x:Name="Star" Source="{local:ImageResource Buffting.Images.star_outline.png}" />

с:

 <Image Grid.Row="1" Grid.Column="1" x:Name="Star" Source="star_outline.png" />

Изображение должно Появляется, Это отвечает на ваш главный вопрос. Я не уверен, почему вы используете IMarkupExtension, даже не назвав его в xaml