首页 > 解决方案 > SKSharp 未加载位图 Xamarin 表单

问题描述

我正在尝试使用 Android 和 UWP 项目将“png”加载到 XamarinForms 应用程序中的 ListView 中。

这是我的 ListView 的 xaml。

   <ListView x:Name="TemplateListView"
        ItemsSource="{Binding TemplateData}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <StackLayout Orientation="Vertical">
                                    <Image Margin="20,0,0,0" Source="{Binding ImageData}" Aspect="AspectFit" HeightRequest="120"></Image>
                                    <Label Text="{Binding Title}"  FontSize="16" />
                                </StackLayout>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>

我的对象类是一个非常简单的对象。

public class TemplateData
{
    public string Title { get; set; }
    public SKBitmap ImageData { get; set; }
}

这是加载位图并作为 ListViews ItemSource 分配给集合的 SKSharp 代码。

//load the image and assisgn it as an Item
     this.TemplateListView.ItemsSource = new TemplateData[]
 {
               new TemplateData{Title="A", ImageData=LoadImage("A.jpg")},
               new TemplateData{Title="B", ImageData=LoadImage("B.jpg")},
          
 };

// 这个代码图片需要是项目资源

    private SKBitmap LoadImage(string filename)
    {
      //  string resourceID = filename;
        string resourceID = "CWON_App.Images."+filename;
        Assembly assembly = GetType().GetTypeInfo().Assembly;

        using (Stream stream = assembly.GetManifestResourceStream(resourceID))
        {
            resourceBitmap = SKBitmap.Decode(stream);
        }

        return resourceBitmap;

    }

我的图像位于 UWP 项目的图像文件夹中,并标记为嵌入式资源。

该应用程序运行时没有错误,但 ListView 中不显示任何内容。

标签: androidxamarin.formsuwpskshapenode

解决方案


Xamarin 图像控件无法加载 SKBitmap,对于这种情况我们建议您使用 ImageSource 替换 SKBitmap。

如果你已经把图片放在了uwp项目文件夹中,你可以使用ImageSource.FromFile加载图片的方法,请注意图片构建动作需要是Content.

private ImageSource LoadImage(string filename)
{
    var source = Device.RuntimePlatform == Device.UWP ? ImageSource.FromFile($"Assets/{filename}") : ImageSource.FromFile("waterfront.jpg");
    return source;
}

有关更多信息,请参阅Xamarin 使用图像


推荐阅读