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

sat*_*ine 6 c# windows-runtime winrt-xaml windows-store-apps windows-8.1

以下代码从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);
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

<Grid>
    <Canvas x:Name="HiddenCanvas"/>
    <Grid x:Name="mainElement" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    </Grid>
</Grid>
Run Code Online (Sandbox Code Playgroud)

它不漂亮,但似乎有效.让我们看看是否有人可以做得更好

Fil*_*kun 1

satur9nine 将渲染的 UI 树放置在不透明前景后面的解决方案似乎是唯一受支持的解决方案。您还可以调整父元素的不透明度以避免它出现。另一种选择是使用 Direct2D 自行渲染它或使用WinRTXamlToolkit.Composition.Render()WinRT XAML Toolkit 中的方法之类的方法。