如何解决与SkiaSharp的Carouselview
我正在尝试将模板设置为包含SkiaSharp的轮播视图。我无法在skia:SKCanvasView上设置Source,所以我创建了模板视图,但是现在将轮播视图绑定到ImageResults时什么也没显示,但是我不知道如何将模板添加到列表中?
public List<Resultlist> ImageResults = new List<Resultlist>();
public class Resultlist
{
public string Desc { get; set; }
public string Value { get; set; }
public SKBitmap foto { get; set; }
}
<CarouselView Margin="0,0" HorizontalScrollBarVisibility="Never" Style="{StaticResource ImageResultCarousel}"
ItemsSource="{Binding ImageResults,Mode=TwoWay}"
BackgroundColor="{DynamicResource PictureBackground}"
>
<CarouselView.ItemTemplate >
<DataTemplate>
<resultlist:template></resultlist:template>
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
模板
<yummy:PancakeView CornerRadius="80">
<skia:SKCanvasView x:Name="canvasView" HeightRequest="400" WidthRequest="200"
PaintSurface="OnCanvasViewPaintSurface" />
</yummy:PancakeView >
模板的背面
SKBitmap bitmap =
BitmapExtensions.LoadBitmapResource(typeof(template),"Resultlist.Screenshot.png");
private void OnCanvasViewPaintSurface(object sender,SKPaintSurfaceEventArgs args)
{
SKImageInfo info = args.Info;
SKSurface surface = args.Surface;
SKCanvas canvas = surface.Canvas;
canvas.Clear();
SKRect dest = new SKRect(0,info.Width,info.Height);
BitmapStretch stretch = (BitmapStretch)BitmapStretch.AspectFill;
BitmapAlignment horizontal = (BitmapAlignment)BitmapAlignment.Center;
BitmapAlignment vertical = (BitmapAlignment)BitmapAlignment.Center;
canvas.DrawBitmap(bitmap,dest,stretch,horizontal,vertical);
}
解决方法
我们可以在DataTemplate中创建内联“视图”。
<CarouselView Margin="0,0" HorizontalScrollBarVisibility="Never" Style="{StaticResource ImageResultCarousel}"
ItemsSource="{Binding ImageResults,Mode=TwoWay}"
BackgroundColor="{DynamicResource PictureBackground}"
>
<CarouselView.ItemTemplate >
<DataTemplate>
<yummy:PancakeView CornerRadius="80">
<skia:SKCanvasView x:Name="canvasView" HeightRequest="400" WidthRequest="200"
PaintSurface="OnCanvasViewPaintSurface" />
</yummy:PancakeView >
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
以及后面的代码
private void OnCanvasViewPaintSurface(object sender,SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs e)
{
var canvasView = sender as SKCanvasView;
var resultList = canvasView.BindingContext as Resultlist;
//Now we can use resultList.foto to draw canvas.
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。