При использовании Canvas CanvasControl не будет запускать событие Draw
Canvas - это элемент управления, использующий абсолютное позиционирование. CanvasControl
не будет отображаться без явной установки Width
или Height
и, естественно, не будет вызывать событие Draw
.
Если вы хотите запустить событие Draw
, установите ширину и свойства Height CanvasControl
, такие как:
<Canvas x:Name="grid">
<canvas:CanvasControl Draw="CanvasControl_Draw"
CreateResources="CanvasControl_CreateResources"
Width="500" Height="500"
/>
</Canvas>
Также возникает ошибка «Значение не попадает в ожидаемый диапазон».
В простом термины, причина этой ошибки в том, что метод 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
.
Спасибо.