次のコードは、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にのみ適用されると思います.WPF要素をオフスクリーンで作成し、ビットマップにレンダリングします.
アップデート:
これまでのところ、レンダリングしたい Canvas を現在表示されているページに配置しますが、通常は画面を埋めるルート UIElement の下に配置して、ユーザーには表示されないようにすることをお勧めします。
<Grid>
<Canvas x:Name="HiddenCanvas"/>
<Grid x:Name="mainElement" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
</Grid>
</Grid>
美しくはありませんが、機能しているようです。誰かがもっとうまくできるか見てみましょう