Dans WinRT C #, comment enregistrer une arborescence XAML hors écran à l’aide de RenderTargetBitmap?

Le code suivant lève une exception cryptique System.ArgumentException de la méthode RenderAsync “La valeur ne se situe pas dans la plage attendue”. Par contre, si mon Canvas fait partie d’un arbre XAML visible, cela fonctionne. Est-il impossible de restituer du code XAML non affiché à l’écran?

Canvas c = new Canvas(); c.Width = 40; c.Height = 40; c.Background = new SolidColorBrush(Color.FromArgb(0xff, 0x80, 0xff, 0x80)); RenderTargetBitmap x = new RenderTargetBitmap(); await x.RenderAsync(c); 

J’ai presque pensé que cette réponse fonctionnerait, mais pas de chance, je suppose que cela ne s’applique qu’à WPF: Créer un élément WPF hors écran et le rendre au format bitmap

METTRE À JOUR:

Jusqu’ici, ma meilleure idée est de placer le canevas que je veux restituer sur la page actuellement visible, mais de le placer sous ce qui est normalement la racine UIElement qui remplit l’écran de sorte qu’elle ne soit pas visible pour l’utilisateur:

      

Ce n’est pas beau mais ça a l’air de marcher. Permet de voir si quelqu’un peut faire mieux

La solution de satur9nine consistant à placer l’arborescence de l’interface utilisateur restituée quelque part derrière un premier plan opaque semble être la seule solution prise en charge. Vous pouvez également jouer avec l’opacité de l’élément parent pour éviter de le faire apparaître. Une autre option consiste à effectuer le rendu vous-même avec Direct2D ou à utiliser quelque chose comme les méthodes WinRTXamlToolkit.Composition.Render() de WinRT XAML Toolkit.

WinRTXamlToolkit.Composition espace de noms WinRTXamlToolkit.Composition a cette extension qui fonctionne. Appelez cette méthode:

 await WriteableBitmapRenderExtensions.RenderToPngStream(element);