Мне нужно создать изображение контрола. Делаю таким образом
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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При обновлении данных хотелось бы видеть сколько времени прошло от старта до завершенияИ видеть в онлайн времени