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にのみ適用されると思います.WPF要素をオフスクリーンで作成し、ビットマップにレンダリングします.

アップデート:

これまでのところ、レンダリングしたい Canvas を現在表示されているページに配置しますが、通常は画面を埋めるルート UIElement の下に配置して、ユーザーには表示されないようにすることをお勧めします。

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

美しくはありませんが、機能しているようです。誰かがもっとうまくできるか見てみましょう

4

2 に答える 2

1

レンダリングされた UI ツリーを不透明な前景の背後に配置するという satur9nine のソリューションが、サポートされている唯一のソリューションのようです。親要素の不透明度を調整して、表示されないようにすることもできます。もう 1 つのオプションは、Direct2D で自分でレンダリングするかWinRTXamlToolkit.Composition.Render()、WinRT XAML Toolkit のメソッドのようなものを使用することです。

于 2013-08-27T14:58:45.187 に答える
1

WinRTXamlToolkit.Composition名前空間には、機能するこの拡張機能があります。このメソッドを呼び出すだけです:

await WriteableBitmapRenderExtensions.RenderToPngStream(element);
于 2014-03-28T07:37:07.377 に答える