在 Win2d canvasControl 中,如何在需要时多次调用 createResources 事件?

In Win2d canvasControl , how to call createResources event multiple times whenever needed?

我有一个 canvasControl,因为当我 运行 Program.I 有一个 FilePicker 从 local.Whenever 中选择一个图像源时,CreateResources 事件只会被触发一次,我需要调用 CreateResources 事件来加载资源,然后使用 canvasBitmap 和 DrawingSession 绘制它。 我会画画,但是,我不知道如何加载资源每当图像是 picked.Can 有人建议我,如何实现这个??

在Win2D中,CreateResource事件只在CanvasControl加载时触发,即只会触发一次

如果在此之后需要创建资源,则需要创建自定义 LoadResourcesForLevelAsync 方法:

async Task LoadResourcesForLevelAsync(CanvasControl resourceCreator, int level)
{
    levelBackground = await CanvasBitmap.LoadAsync(resourceCreator, ...);
    levelThingie = await CanvasBitmap.LoadAsync(resourceCreator, ...);
    // etc.
}

这个在Win2D文档中有说明,请参考这个文档:


更新

Draw事件中加载图片的简单例子:

private string imageFilePath = @"ms-appx:///Assets/StoreLogo.png";
private CanvasBitmap img;

private void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
    if (img != null)
    {
        args.DrawingSession.DrawImage(img);
    }
    else
    {
        GetImage().Wait();
    }
    async Task GetImage()
    {
        await Task.Run(async () =>
        {
            img = await CanvasBitmap.LoadAsync(sender, new Uri(imageFilePath));
        }).ConfigureAwait(false);
    }
}

谢谢。

不需要一直在 CreateResource 事件中加载资源,您可以随时加载资源(在 Draw 事件处理程序之外),然后只需调用 Invalidate 方法.看看这个:

CanvasBitmap btmp;
private async void LoadNecessaryResourcesAndDraw()
{
    btmp = await CanvasBitmap.LoadAsync(MyCanvasControl, "some_image.png");
    MyCanvasControl.Invalidate(); /// this will invoke the draw event
}

public void MyCanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
    if(btmp != null)
    {
        args.DrawingSession.DrawImage(btmp);
    }
}

现在您可以随时调用 LoadNecessaryResourcesAndDraw() 方法。它将异步加载图像,然后调用绘制图像的绘制事件。