6

次のコードは、RenderAsync方法から潜在System.ArgumentExceptionの「値が期待範囲内にない。」スロー一方、私のキャンバスが目に見えるXAMLツリーの一部であれば動作します。画面に表示されないXAMLをレンダリングすることは不可能ですか?は、どのように私は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> 

綺麗ではありませんがうまくいくようです。誰もが不透明フォアグラウンドの後ろにどこかでレンダリングされたUIツリーを置くために、より良い

答えて

1

satur9nineのソリューションを行うことができるかどうかを確認することができますのみサポートソリューションであるように思われます。また、親要素の不透明度を上げて表示しないようにすることもできます。別のオプションは、Direct2Dにしてそれを自分でレンダリングするか、WinRTのXAML ToolkitのWinRTXamlToolkit.Composition.Render()メソッドのようなものを使用することです。

1

WinRTXamlToolkit.Composition名前空間が働くこの拡張機能を持っています。ただ、このメソッドを呼び出します。

await WriteableBitmapRenderExtensions.RenderToPngStream(element); 
関連する問題