8

これらのチャートを画面に表示することなく、いくつかのチャート画像を作成しようとしています。私はかなり長い間これに携わっていて、さまざまなことを試しましたが、何もうまくいかないようです。最初にチャートをウィンドウに表示すると、コードは完全に機能しますが、ウィンドウに表示しないと、ビットマップは白と黒の境界線だけになります (理由はわかりません)。

レンダリングする前に境界線にグラフを追加して、境界線に緑色のborderBrushを追加しようとしました。ビットマップでは、緑の borderBrush が表示され、次に黒の境界線と白の背景が表示されますが、グラフは表示されません。チャートは黒いボーダーに含まれていないので、それがどこから来ているのかわかりません。

window.Show() を呼び出さずにチャートをウィンドウに追加しようとしましたが、再び黒いボーダーと白い背景が表示されます。ただし、window.Show() を呼び出すと、ビットマップにチャートが含まれます。

hereで説明されているように、drawingVisual を使用してみましたが、同じ結果です。

コードは次のとおりです (境界線またはウィンドウへの要素の追加は含まれません)。

private static BitmapSource CreateElementScreenshot(FrameworkElement element, int dpi)
{
    if (!element.IsMeasureValid)
    {
        Size size = new Size(element.Width, element.Height);
        element.Measure(size);
        element.Arrange(new Rect(size));
    }

    element.UpdateLayout();

    var scale = dpi/96.0;

    var renderTargetBitmap = new RenderTargetBitmap
        (
            (int)(scale * element.RenderSize.Width),(int)(scale * element.RenderSize.Height),dpi,dpi,PixelFormats.Default
        );

    // this is waiting for dispatcher to perform measure, arrange and render passes
    element.Dispatcher.Invoke(((Action)(() => renderTargetBitmap.Render(element))), DispatcherPriority.Render);

    return renderTargetBitmap;
}

注: グラフは ContentControl です。

最初にウィンドウに表示せずにチャートをレンダリングする方法はありますか?

4

3 に答える 3

9

element. ApplyTemplate() を呼び出すとうまくいきました。

于 2010-05-11T15:18:00.117 に答える