簡體   English   中英

將SkiaSharp的PaintSurface與Xamarin形式和棱鏡綁定

[英]Binding SkiaSharp's PaintSurface with Xamarin Forms and Prism

我正在嘗試讓SkiaSharp與Xamarin Forms和Prism一起使用。 我在下面的代碼背后使用它

public partial class RoomLayoutPage : ContentPage 
{ 

SKCanvasView canvasView;

public RoomLayoutPage()
{
  InitializeComponent();

  canvasView = new SKCanvasView();
  canvasView.PaintSurface += OnCanvasViewPaintSurface;
  Content = canvasView;
}


private void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
  SKSurface surface = e.Surface;
  SKCanvas canvas = surface.Canvas;

  canvas.Clear();

  SKPaint blackPaint = new SKPaint
  {
    Color = SKColors.Black,
  };

  canvas.DrawRect(0, 0, 100, 100, blackPaint);
}
}

但現在我想將其移至我的Prism ViewModel。 如果我將其移動,則內容無效

  1. 如何從ViewModel引用xaml元素? 我不想這樣做,因為我的ViewModel然后耦合到了視圖。
  2. (首選方式)如果我將SKCanvasView放在頁面上

我可以使用EventToCommandBehaviour綁定到事件

    <forms:SKCanvasView>
  <forms:SKCanvasView.Behaviors>
    <behaviors:EventToCommandBehavior Command="{Binding OnCanvasViewPaintSurface}" EventName="PaintSurface"/>
  </forms:SKCanvasView.Behaviors>
</forms:SKCanvasView>

但是我不確定如何綁定SKPaintSurfaceEventArgs

OnCanvasViewPaintSurface = new DelegateCommand<SKPaintSurfaceEventArgs>(OnCanvasViewPaintAction);

我假設它是來自這里https://prismlibrary.github.io/docs/xamarin-forms/EventToCommandBehavior.html的EventArgs選項之一?

謝謝

因此,使用值轉換器即可解決該問題。

public class SkiaEventArgsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  var sKPaintSurfaceEventArgs = value as SKPaintSurfaceEventArgs;
  if (sKPaintSurfaceEventArgs == null)
  {
    throw new ArgumentException("Expected value to be of type SKPaintSurfaceEventArgs", nameof(value));
  }

  return sKPaintSurfaceEventArgs;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
  throw new NotImplementedException();
}
}

不能完全確定為什么它不能自動轉換但可以正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM