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

标签 c# windows-runtime windows-store-apps winrt-xaml 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);

我几乎认为这个答案会奏效,但运气不好,我猜它只适用于 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/

相关文章:

c# - RestSharp:无法创建 SSL/TLS 安全通道

c# - 如何在 WinRT 的应用 ViewModel 中异步使用 json.net?

c# - Windows 8 - 如何更改动态平铺背景图像?

C# - 转换日期时间格式 yyyy-MM-dd

c# - 如何知道我是否在 C# 中中了彩票

c# - cshtml中 '@'标志是什么意思?

c# - 如何从用户控件中监听属性值的变化

c# - 使用 CSWinRT 调用 .net5 windows api

c# - 使用 XmlWriter 创建 xml 文件

visual-studio-2012 - Windows 应用程序认证工具包在徽章 Logo 尺寸上失败