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
在没有显式设置Width
或Height
的情况下不会渲染,自然不会触发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
事件结束之前被触发。
谢谢。
我尝试了什么? 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
在没有显式设置Width
或Height
的情况下不会渲染,自然不会触发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
事件结束之前被触发。
谢谢。