Xamarin Android中的列表视图中未加载嵌入式资源

时间:2018-10-16 15:54:14

标签: c# android listview xamarin.forms

[更新]

因此,通过使用提供的Dependency Injector,我发现了一种非常简单的方法来解决此问题,并且可以从Android的资产中加载东西。 我将不得不寻求如何在iOS中执行此操作,但现在这不是一个大问题。

但是,更令人担忧的是,单个单元格未按应有的方式显示。

XAML的经修订的(和相关的)位如下:

<ViewCell>
   <StackLayout Orientation="Vertical">
     <Label Text="{Binding Name}" FontAttributes="Bold" FontSize="Large" HorizontalOptions="StartAndExpand" VerticalOptions="Start"></Label>
     <StackLayout Orientation="Horizontal">
       <Label Text="{Binding Email}" HorizontalOptions="Fill" VerticalOptions="Start"></Label>
       <Image Source="{Binding image.Source}" HorizontalOptions="EndAndExpand"></Image>
     </StackLayout>
  </StackLayout>
</ViewCell>

因此,当前显示为:
->第1行=完美
->第2行:电子邮件=完美,图片=仅有一小部分可见

我怀疑这与布局有关,但我不知道为什么要这样做。

请提出建议!
[OLD POST]
我有一个XAML文件,除了图像元素外,它可以正确显示在Android预览窗格中。这是我正在使用的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:App3"
             x:Class="App3.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <Label Text="WPF test for POD" 
           HorizontalOptions="Center"
           VerticalOptions="Center" />
        <Entry Placeholder="Email address" Keyboard="Email"></Entry>
        <Entry Placeholder="Password" IsPassword="True" Text="WobblyDobbly"></Entry>
        <Button x:Name="BtnSignIn" Text="Sign In" HorizontalOptions="FillAndExpand" Clicked="BtnSignIn_Clicked">
        </Button>
        <StackLayout x:Name="slUserInfo" HorizontalOptions="FillAndExpand">
            <Entry Placeholder="Name" x:Name="txtName" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"></Entry>
            <Entry Placeholder="Email" x:Name="txtEmail" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Keyboard="Email"></Entry>
            <Button Text="Add to list" x:Name="btnAddToList" Clicked="btnAddToList_Clicked" HorizontalOptions="StartAndExpand"></Button>
        </StackLayout>
        <ListView x:Name="lvItems" VerticalOptions="Start" HorizontalOptions="StartAndExpand">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <!--
                    <TextCell Text="{Binding Name}" Detail="{Binding Email}">

                    </TextCell>
                    -->
                    <ViewCell>
                        <StackLayout Orientation="Vertical">
                            <Label Text="{Binding Name}" HorizontalOptions="FillAndExpand" FontAttributes="Bold"></Label>
                            <Label Text="{Binding Email}" HorizontalOptions="StartAndExpand"></Label>
                            <Image Source="{Binding image.Source}" HorizontalOptions="End"> </Image>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>               

            </ListView.ItemTemplate>            

        </ListView>
        <Button x:Name="btnAddItem" Text="Add..." HorizontalOptions="Start" Clicked="btnAddItem_Clicked">

        </Button>
    </StackLayout> 
</ContentPage>

在后端,我有以下类:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using Xamarin.Forms;

namespace App3
{
    class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public Image image { get; set; }
        public Item( int AnId, string AName, string AnEmail)
        {
            Id = AnId;
            Name = AName;
            Email = AnEmail;
        }
    }

    class ItemList : ObservableCollection<Item>
    {
        public void Add(string Name, string Email,string AssignedImage, int Id = 0)
        {
            int ActualID = Id;
            Item item = new Item(Id, Name, Email);
            if (ActualID == 0)
            {
                ActualID = NextId();
            }
            item.image = new Image();
            item.image.Source = ImageSource.FromResource(AssignedImage);
            Add(item);
        }

        public int NextId()
        {
            int CurrentCount = Count;
            return ++CurrentCount;
        }
    }
}

使用UWP项目时,一切正常。 但是,当我在Android上运行此程序时-就像在预览中一样-它不会显示图像。

我的MainPage.xaml.cs如下:

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

namespace App3
{
    public partial class MainPage : ContentPage
    {
        private ItemList model = new ItemList();
        public MainPage()
        {
            InitializeComponent();
            lvItems.ItemsSource = model;
            model.Add("Andrea", "email@email.com", "App3.arrow_left.png");
            slUserInfo.IsVisible = false;
        }

        private void BtnSignIn_Clicked(object sender, EventArgs e)
        {

        }

        private void btnAddItem_Clicked(object sender, EventArgs e)
        {
            slUserInfo.IsVisible = true; 
        }

        private void btnAddToList_Clicked(object sender, EventArgs e)
        {
            model.Add(txtName.Text, txtEmail.Text,"App3.arrow_left.png");
            txtName.Text = "";
            txtEmail.Text = "";
        }
    }
}

该图像被标记为EmbeddedResource,位于公共项目下的/ Resources中。

当我以UWP运行它时,图像正确显示。当我将其作为Android应用程序运行时,图像完全不显示。 Android应用程序中没有特殊代码。 我确定我做错了什么,您能指出我正确的方向吗?

P.S。这是我专为Xamarin工作的第一天,所以请不要回避一些基本问题,因为这很容易被我忽略。

0 个答案:

没有答案