SKSharp 未加载位图 Xamarin Forms
SKSharp not loading Bitmap Xamarin Forms
我正在尝试使用 Android 和 UWP 项目将“png”加载到 XamarinForms 应用程序的 ListView 中。
这是我的 xaml ListView。
<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>
我的对象class很简单
public class TemplateData
{
public string Title { get; set; }
public SKBitmap ImageData { get; set; }
}
这里是 SKSharp 代码,用于加载位图并作为 ListViews ItemSource 分配给集合。
//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 项目的 Images 文件夹中并标记为 Embedded Resource。
应用程序运行没有错误,但 ListView 中没有显示任何内容。
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;
}
我使用了本文档中显示的技术。
并删除了 SKSharp 库
我正在尝试使用 Android 和 UWP 项目将“png”加载到 XamarinForms 应用程序的 ListView 中。
这是我的 xaml ListView。
<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>
我的对象class很简单
public class TemplateData
{
public string Title { get; set; }
public SKBitmap ImageData { get; set; }
}
这里是 SKSharp 代码,用于加载位图并作为 ListViews ItemSource 分配给集合。
//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 项目的 Images 文件夹中并标记为 Embedded Resource。
应用程序运行没有错误,但 ListView 中没有显示任何内容。
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;
}
我使用了本文档中显示的技术。
并删除了 SKSharp 库