以下代码从 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:Create WPF element offscreen and render to bitmap
更新:
到目前为止,我最好的想法是将我想要呈现的 Canvas 放入当前可见的页面中,但将其放置在通常填充屏幕的根 UIElement 下方,以便用户看不到它:
<Grid>
<Canvas x:Name="HiddenCanvas"/>
<Grid x:Name="mainElement" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
</Grid>
</Grid>
它并不漂亮,但它似乎有效。让我们看看是否有人可以做得更好
最佳答案
satur9nine 将渲染的 UI 树放在不透明前景后面的某个位置的解决方案似乎是唯一受支持的解决方案。您还可以调整父元素的不透明度以避免它出现。另一种选择是使用 Direct2D 自己呈现它,或使用 WinRT XAML 工具包中的 WinRTXamlToolkit.Composition.Render()
方法之类的方法。
关于c# - 在 WinRT C# 中,如何使用 RenderTargetBitmap 保存屏幕外 XAML 树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18419810/