Как правильно связать изображения для использования в Collection View в Xaramin.Forms (проект iOS) - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть проект Xaramin.Forms, в котором интерфейс включает представление коллекции. Однако при запуске проекта iOS изображения не отображаются на iPhone. Для Android отображаются изображения.

После некоторых онлайн-исследований я понял, что мне нужно включить изображение в файл активов проекта iOS. Я пробовал много примеров, связанных со структурой данных ImageSource. Это не сработало так, как я хотел.

Итак, мой вопрос: как мне правильно настроить все, чтобы я мог привязать путь расположения изображения к представлению коллекции?

Вот фрагмент моего исходного кода Xaml:

<DataTemplate>
                        <StackLayout Orientation="Vertical">
                            <Label Text="{Binding Path=StatusTitle}" FontSize="Large" HorizontalTextAlignment="Center" FontAttributes="Bold"></Label>
                            <Image Source="{Binding Path=StatusImage}" Scale="0.65"></Image>
                            <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" IsEnabled="True">
                                <Entry Text="{Binding Path=StatusValue}" VerticalOptions="Center" WidthRequest="60" FlowDirection="MatchParent" HorizontalTextAlignment="End" FontSize="Large"></Entry>
                                <Label Text="{Binding Path=StatusUnit}" FontSize="Large" VerticalOptions="Center"></Label>
                            </StackLayout>
                        </StackLayout>
                    </DataTemplate>

Ниже приведен фрагмент кода, который заполняет представление коллекции (Примечание. Там есть некоторый отладочный код, который я оставлю только для справки:

bodyTemp = new DataObject { StatusTitle = "Temp", StatusImage = "weatherTest", StatusUnit = "F", StatusValue = "0" };
       /*         pressureData = new DataObject { StatusTitle = "Pressure", StatusUnit = "kPa", StatusImage = "barometer.png", StatusValue = "0" };
                humditiyData = new DataObject { StatusTitle = "Humidity", StatusUnit = "%RH", StatusImage = "humidity.png", StatusValue = "0" };
                lightData = new DataObject { StatusTitle = "UVC Light", StatusUnit = "%", StatusImage = "lightbulb.png", StatusValue = "0" };
                fanSpeedData = new DataObject { StatusTitle = "Fan Speed", StatusUnit = "%", StatusImage = "fan.png", StatusValue = "0" };
                batteryData = new DataObject { StatusTitle = "Battery", StatusUnit = "%", StatusImage = "battery.png", StatusValue = "0" };
                heartRateData = new DataObject { StatusTitle = "Heart Rate", StatusUnit = "BPM", StatusImage = "heart.png", StatusValue = "0" };
                bosData = new DataObject { StatusTitle = "BOS Rate", StatusUnit = "%", StatusImage = "oxygen.png", StatusValue = "0" };
                wifiData = new DataObject { StatusTitle = "Wifi", StatusUnit = "", StatusImage = "wifi.png", StatusValue = "Good" };
                bluetoothData = new DataObject { StatusTitle = "Bluetooth", StatusUnit = "", StatusImage = "bluetooth.png", StatusValue = "Good" }; */

                List<DataObject> dataArray = new List<DataObject>(10);
                dataArray.Add(bodyTemp);
           /*     dataArray.Add(pressureData);
                dataArray.Add(humditiyData);
                dataArray.Add(lightData);
                dataArray.Add(fanSpeedData);
                dataArray.Add(batteryData);
                dataArray.Add(heartRateData);
                dataArray.Add(bosData);
                dataArray.Add(wifiData);
                dataArray.Add(bluetoothData); */

                BindingContext = dataArray;

А вот определение класса моего объекта данных:

class DataObject : INotifyPropertyChanged

{

private string p_Value = "0";

    public string StatusTitle
    {
        get;
        set;
    }

    public string StatusImage
    {
        get;
        set;
    }

    public string StatusUnit
    {
        get;
        set;
    }

    public string StatusValue
    {
        get { return p_Value; }
        set
        {
            if(value != p_Value)
            {
                p_Value = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("StatusValue"));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

}

1 Ответ

0 голосов
/ 17 апреля 2020

Наличие чека с Локальные изображения этой главы.

  • iOS - предпочитаемый способ управления и поддержки изображений, поскольку iOS 9 - это использование образа каталога активов наборов, которые должны содержать все версий образа, которые необходимы для поддержки различных устройств и масштабных коэффициентов для приложения. Для получения дополнительной информации см. Добавление изображений в набор изображений каталога активов .
  • Android - Поместить изображения в каталог Resources / drawable с действием сборки: AndroidResource. Также могут быть предоставлены версии изображения с высоким и низким DPI (в соответствующих подкаталогах ресурсов, таких как drawable-ldpi , drawable-hdpi и drawable-xhdpi ).

Примечание :

До iOS 9 изображения обычно помещались в папку Resources с помощью Действие сборки: BundleResource . Однако этот метод работы с изображениями в приложении iOS не рекомендуется Apple. Для получения дополнительной информации см. Размеры изображений и Имена файлов.

Поэтому , если установить <Image Source="Saimiri_sciureus.jpg.jpg" /> в формах Xamrin, вы увидите изображение на каждой платформе следующим образом:

Android

enter image description here

iOS: (с использованием каталога активов)

enter image description here

или (с помощью папки ресурсов)

enter image description here

Эффект:

enter image description hereenter image description here

...