在WinRT C#中如何使用RenderTargetBitmap保存屏幕外XAML树?

以下代码从RenderAsync方法抛出一个神秘的System.ArgumentException“值不在预期范围内”。 另一方面,如果我的Canvas是可见的XAML树的一部分,它的工作原理。 是否无法呈现未在屏幕上显示的某些XAML?

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); 

我几乎认为这个答案可行,但没有运气,我猜它只适用于WPF:在屏幕外创建WPF元素并渲染到位图

更新:

到目前为止,我最好的想法是将我想渲染的Canvas放入当前可见的页面,但将其置于通常填充屏幕的根UIElement之下,以便用户看不到:

      

它不漂亮,但它似乎工作。 让我们看看是否有人能做得更好

satur9nine将渲染的UI树放在不透明前景后面的解决方案似乎是唯一支持的解决方案。 你也可以摆弄父元素的不透明度,以避免它出现。 另一个选择是使用Direct2D自己渲染它或使用类似WinRT XAML Toolkit中的WinRTXamlToolkit.Composition.Render()方法。

WinRTXamlToolkit.Composition命名空间有此扩展WinRTXamlToolkit.Composition 。 只需调用此方法:

 await WriteableBitmapRenderExtensions.RenderToPngStream(element);