C# win2D CanvasControl DrawImage()通过错误;值不在预期范围内";?
我试过什么? XAML代码: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而不
<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);
}