win2D CanvasControl DrawImage() 通过错误"Value Does Not Fall Within the expected Range"?

win2D CanvasControl DrawImage() throughs the error "Value Does Not Fall Within the expected Range"?

我尝试了什么? XAML代码:

 <Canvas x:Name="grid">
<canvas:CanvasControl Draw="CanvasControl_Draw" CreateResources="CanvasControl_CreateResourcesAsync" ></canvas:CanvasControl>
    </Canvas>

C#代码:

CanvasBitmap canvasBitmap;
private async void CanvasControl_CreateResourcesAsync(CanvasControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args)
{
  canvasBitmap = await CanvasBitmap.LoadAsync(sender, @"Assets\Square150x150Logo.scale-200.png");
  sender.Invalidate();
}
private void  CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
   Vector2 Vector = new Vector2();
   Vector.X = 10;
   Vector.Y = 10;
   args.DrawingSession.DrawImage(canvasBitmap,Vector);          
}

在使用 Canvas 时,Canvas 控件不会触发绘制事件,如果我使用 Grid 而不是 Canvas,它会触发 [=21= 的绘制事件]控制。我需要 Canvas 在后台。错误 "The Value does Not Fall Within The Expected Range " 也 occurs.Can 有人帮我吗??

While using Canvas,the CanvasControl won't fire the Draw Event

Canvas是一个使用绝对定位的控件。 CanvasControl在没有显式设置WidthHeight的情况下不会渲染,自然不会触发Draw事件。

如果要触发Draw事件,请设置CanvasControl的Width和Height属性,如:

<Canvas x:Name="grid">
    <canvas:CanvasControl Draw="CanvasControl_Draw" 
                          CreateResources="CanvasControl_CreateResources"
                          Width="500" Height="500"
                          />
</Canvas>

The Error "The Value does Not Fall Within The Expected Range " also occurs.

简单来说,这个错误的原因是Draw方法准备渲染尚未加载的图像。

如果想在CreateResources事件中处理异步方法,比如图片加载,可以考虑这样做:

CanvasBitmap canvasBitmap;
private void CanvasControl_CreateResources(CanvasControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args)
{
    args.TrackAsyncAction(CreateResourceAsync(sender).AsAsyncAction());
    sender.Invalidate();
}

private async Task CreateResourceAsync(CanvasControl sender)
{
    canvasBitmap = await CanvasBitmap.LoadAsync(sender, @"Assets\Square150x150Logo.scale-200.png");
}

这确保了 Draw 事件不会在 CreateResources 事件结束之前被触发。

谢谢。