コントロールには親コンテナーがないため、適切なレイアウトを行うには、MeasureとArrangeを呼び出す必要があります。レイアウトは非同期で行われるため ( MeasureとArrangeの解説を参照)、 UpdateLayoutを呼び出して、レイアウトをすぐに強制的に更新する必要がある場合もあります。
public BitmapSource RenderToBitmap(UIElement element, Size size)
{
element.Measure(size);
element.Arrange(new Rect(size));
element.UpdateLayout();
var bitmap = new RenderTargetBitmap(
(int)size.Width, (int)size.Height, 96, 96, PixelFormats.Default);
bitmap.Render(element);
return bitmap;
}
Width
要素のandをすでに設定している場合はHeight
、それを size パラメータに使用できます。
var grid = new Grid
{
Width = 200,
Height = 200,
Background = Brushes.Yellow
};
grid.Children.Add(
new Ellipse
{
Width = 100,
Height = 100,
Fill = Brushes.Blue
});
var bitmap = RenderElement(grid, new Size(grid.Width, grid.Height));