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

C# 在WinRT C中,如何使用RenderTargetBitmap保存屏幕外的XAML树?,c#,windows-runtime,windows-store-apps,winrt-xaml,windows-8.1,C#,Windows Runtime,Windows Store Apps,Winrt Xaml,Windows 8.1,下面的代码从RenderAsync方法“值不在预期范围内”中抛出一个神秘的System.ArgumentException。另一方面,如果我的画布是可见XAML树的一部分,它会工作。是否无法呈现屏幕上未显示的某些XAML Canvas c = new Canvas(); c.Width = 40; c.Height = 40; c.Background = new SolidColorBrush(Color.FromArgb(0xff, 0x80, 0xff, 0x80)); RenderTa

下面的代码从RenderAsync方法“值不在预期范围内”中抛出一个神秘的System.ArgumentException。另一方面,如果我的画布是可见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:

更新:

到目前为止,我的最佳想法是将要渲染的画布放入当前可见的页面中,但将其放置在通常填充屏幕的根元素下面,以便用户看不到它:

<Grid>
    <Canvas x:Name="HiddenCanvas"/>
    <Grid x:Name="mainElement" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    </Grid>
</Grid>


它并不漂亮,但似乎很管用。让我们看看是否有人能做得更好。

Satura9Nine的解决方案是将呈现的UI树放在不透明前景后面,这似乎是唯一受支持的解决方案。您还可以修改父元素的不透明度,以避免它显示出来。另一个选项是使用Direct2D自己呈现它,或者使用类似WinRT XAML Toolkit中的
WinRTXamlToolkit.Composition.render()方法的方法。

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

await WriteableBitmapRenderExtensions.RenderToPngStream(element);