Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# win2D CanvasControl DrawImage()通过错误;值不在预期范围内";?_C#_Uwp_Win2d - Fatal编程技术网

C# win2D CanvasControl DrawImage()通过错误;值不在预期范围内";?

C# win2D CanvasControl DrawImage()通过错误;值不在预期范围内";?,c#,uwp,win2d,C#,Uwp,Win2d,我试过什么? XAML代码: <Canvas x:Name="grid"> <canvas:CanvasControl Draw="CanvasControl_Draw" CreateResources="CanvasControl_CreateResourcesAsync" ></canvas:CanvasControl> </Canvas> 在使用Canvas时,CanvasControl不会触发Draw事件,如果我使用Grid而不

我试过什么? XAML代码:

 <Canvas x:Name="grid">
<canvas:CanvasControl Draw="CanvasControl_Draw" CreateResources="CanvasControl_CreateResourcesAsync" ></canvas:CanvasControl>
    </Canvas>
在使用Canvas时,CanvasControl不会触发Draw事件,如果我使用Grid而不是Canvas,它会触发CanvasControl的Draw事件。我需要背景中的画布。并且错误“值不在预期范围内”也会发生。有人能帮我吗

使用Canvas时,CanvasControl不会触发Draw事件

Canvas是一个使用绝对定位的控件<代码>画布控件在未明确设置
宽度
高度
的情况下不会渲染,并且自然不会触发
绘制
事件

如果要触发
绘制
事件,请设置
画布控件
的宽度和高度属性,例如:


也会出现错误“值不在预期范围内”

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

如果您想处理<代码> CurraseSueSux/Cux>事件(如图像加载)中的异步方法,可以考虑这样做:

画布位图画布位图;
私有void CanvasControl_CreateResources(CanvasControl发件人,Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs)
{
args.TrackAsyncAction(CreateResourceAsync(sender.asAsAsAsyncAction());
sender.Invalidate();
}
专用异步任务CreateResourceAsync(CanvasControl发送方)
{
canvasBitmap=wait canvasBitmap.LoadAsync(发送方@“Assets\Square150x150Logo.scale-200.png”);
}
这确保在
CreateResources
事件结束之前不会触发
Draw
事件


谢谢。

是否可以设置在win2d中绘制的图像的宽度和高度?如果可能,如何设置?
DrawingSession.DrawImage()
方法有许多重载,其中一个重载可以通过
args.DrawingSession.DrawImage(canvasBitmap,Vector,new Rect(0,0,200,200))
限制图片的大小;它只是将图像裁剪到所提到的宽度和高度…我想要完整图像?嗨,在
DrawImage
中设置的
Rect
用于限制渲染区域。如果希望图片整体显示,则需要修改图片的分辨率,可以使用
CanvasBitmap.LoadAsync(sender,@“your_url”,200)
,添加一个参数来限制图片的分辨率。现在工作正常。我想在CanvasControl无效时调用CreateResources事件?CanvasControl无效时不会调用CanvasControl CreateResources事件?
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);          
}