6

以下代碼從RenderAsync方法拋出一個神祕的System.ArgumentException「值不在預期範圍內」。另一方面,如果我的Canvas是可見的XAML樹的一部分,它就可以工作。是否不可能呈現某些未在屏幕上顯示的XAML?在WinRT C#中,如何使用RenderTargetBitmap保存離屏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

UPDATE:

到目前爲止,我的最好的辦法是把畫布我想渲染到當前可見的頁面中,但將其放置在通常爲填充屏幕的根UIElement下方,以便用戶不可見:

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

這不是很美,但它似乎工作。讓我們看看是否有人可以做得更好

回答

1

satur9nine的解決方案將呈現的UI樹置於不透明的前景背後似乎是唯一受支持的解決方案。你也可以擺弄父元素的不透明性,以避免它顯示出來。另一種選擇是使用Direct2D自己渲染它,或使用WinRT XAML Toolkit中的WinRTXamlToolkit.Composition.Render()方法。

1

WinRTXamlToolkit.Composition命名空間具有此擴展的作品。只需調用此方法:

await WriteableBitmapRenderExtensions.RenderToPngStream(element); 
相關問題