Мне нужно создать изображение контрола. Делаю таким образом
public static BitmapFrame CreateControlFrame(FrameworkElement control)
{
var width = control.ActualWidth == 0 ? control.Width : control.ActualWidth;
var height = control.ActualHeight == 0 ? control.Height : control.ActualHeight;
var bmp = new RenderTargetBitmap((int)Math.Ceiling(width), (int)Math.Ceiling(height), 96, 96, PixelFormats.Pbgra32);
bmp.Render(control);
return BitmapFrame.Create(bmp);
}
но это работает только если у меня контрол находится на форме и он видимый. А мне надо создать изображение контрола, которого нет на форме или он скрыт (Visibility = Hidden/Collapsed)
В идеале вот так
var btn = new Button();
btn.Content = "qwe";
btn.Width = 100;
btn.Height = 30;
WpfControlRenderer.CreateControlScreenshot(btn, "ss.png");
Может кто знает как?
На этот вопрос уже был дан ответ на англоязычном stackoverflow: Render a “not visible” WPF controls to an bitmap image
Для контрола необходимо вызывать методы Measure и Arrange, для их лайоутинга, и только потом - рендерить:
var btn = new Button();
btn.Content = "qwe";
btn.Width = 100;
btn.Height = 30;
var size = new Size(250,250);
btn.Measure(size);
btn.Arrange(new Rect(size));
RenderTargetBitmap bmp = new RenderTargetBitmap(250, 100, 96, 96, PixelFormats.Pbgra32);
bmp.Render(btn);
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bmp));
using(var s = File.OpenWrite("image.png"))
enc.Save(s);
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости