6

以下代码从 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>

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

4

2 回答 2

1

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

await WriteableBitmapRenderExtensions.RenderToPngStream(element);
于 2014-03-28T07:37:07.377 回答
1

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

于 2013-08-27T14:58:45.187 回答