No puedo entender por qué esto no funciona, o lo que necesito para que funcione.Crear elemento WPF fuera de pantalla y renderizar en mapa de bits
Para repro, crear una sencilla aplicación WPF y reemplazar el constructor de la ventana principal de esta manera:
public MainWindow()
{
InitializeComponent();
// simple visual definition
var grid = new Grid { Width = 300, Height = 300 };
var text = new TextBlock
{
Text = "Y DON'T I WORK???",
FontSize = 100,
FontWeight =
FontWeights.Bold
};
grid.Children.Add(text);
// update the layout so everything is awesome cool
grid.Measure(grid.DesiredSize);
grid.Arrange(new Rect(grid.DesiredSize));
grid.UpdateLayout();
// create a BitmapSource from the visual
var rtb = new RenderTargetBitmap(
(int)grid.Width,
(int)grid.Height,
96,
96,
PixelFormats.Pbgra32);
rtb.Render(grid);
// Slap it in the window
this.Content = new Image { Source = rtb, Width = 300, Height = 300 };
}
Esto se traduce en una imagen vacía. Si guardo el RTB en el disco como PNG, tiene el tamaño correcto pero es transparente.
Si, sin embargo, hago esto con un visual que se ha mostrado en la pantalla, funciona bien.
¿Cómo puedo representar una imagen visual que he construido fuera de pantalla en un mapa de bits?
Hijo de un ........ he comprobado una vez DesiredSize camino de regreso cuando empecé a tratar de lograr esto y no era 0,0 (quién sabe por qué) y nunca lo volvió a verificar. ¡Gracias! – Will
Acabamos de descubrir que si tiene ItemsControls vinculado a sus ItemsSources dentro del control que está visualizando fuera de pantalla, parece que tiene que llamar a 'UpdateLayout()' o no representan ningún elemento. –