Tengo un problema extraño con WPF, estaba cargando imágenes del disco en tiempo de ejecución y agregándolas a un contenedor StackView. Sin embargo, las imágenes no se muestran. Después de algunas depuraciones encontré el truco, pero realmente no tiene ningún sentido. He hecho una pequeña aplicación de demostración para identificar el problema:Carga dinámica de imágenes en WPF
Crear un nuevo proyecto de WPF, y pegar el código de la siguiente manera:
xaml:
<Window x:Class="wpfBug.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<StackPanel Name="sp">
</StackPanel>
</Window>
xaml.cs, pegar a continuación usings por defecto :
namespace wpfBug
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Image i = new Image();
BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri("picture.jpg", UriKind.Relative);
src.EndInit();
i.Source = src;
i.Stretch = Stretch.Uniform;
//int q = src.PixelHeight; // Image loads here
sp.Children.Add(i);
}
}
}
Copiar una imagen a la carpeta bin/debug y lo llaman 'foto.jpg'
Este programa no muestra nada, a menos que la línea comentada esté descomentada.
¿Alguien puede explicar lo que estoy haciendo mal, o por qué sucede esto? Si elimina la imagen y ejecuta el programa, genera una excepción en la línea 'int q = ...'. Si se comenta esa línea, el programa se ejecuta sin excepciones, incluso si no hay ninguna imagen presente. Cargar una imagen solo si tiene sentido, pero luego la imagen debe cargarse cuando agregue el control de Imagen a StackPanel.
¿Alguna idea?
Editar: Por cierto, si agrega la imagen como recurso, la línea 'int q = ..' no es necesaria.
He probado esto y funciona. Sin embargo, esto demuestra que hay un error en el marco, porque si configura CacheOption en OnDemand, la imagen nunca se cargará aunque se cargue antes de que se muestre en la pantalla. Gracias por el consejo, no noté esa propiedad. +1;) –
Me ayudó :) –
... y yo también :) –