J'ai un étrange problème avec WPF, j'était en train de charger des images à partir du disque lors de l'exécution et de les ajouter à une Empilervoir conteneur. Cependant, les images ne sont pas affichées. Après un peu de débogage, j'ai trouvé le truc, mais ça n'a pas vraiment de sens. J'ai fait une petite démo app pour identifier le problème:
Créer un nouveau projet WPF, et de coller le code comme suit:
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, coller ci-dessous par défaut de l'usage:
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);
}
}
}
Copier une image pour la bin/Debug dossier et de l'appeler 'picture.jpg'
Ce programme n'a pas d'afficher quoi que ce soit, à moins que la ligne de commentaire est sans commentaire.
Quelqu'un peut-il expliquer ce que je fais mal, ou pourquoi cela se produit? Si vous supprimez l'image et exécuter le programme il génère une exception sur le 'int q= ...' ligne. Si cette ligne est commentée le programme s'exécute sans exceptions, même si aucune image n'est présente. Chargement d'une image uniquement si nessesary de sens, mais l'image doit être chargée lorsque j'ajoute le contrôle de l'Image de la StackPanel.
Toute ide ?
Edit: En passant, si vous ajoutez l'image en tant que ressource, l' 'int q = ..' ligne n'est pas nécessaire.