У меня странная проблема с WPF, я загружал изображения с диска во время выполнения и добавлял их в контейнер StackView. Однако изображения не отображались. После некоторой отладки я нашел трюк, но это действительно не имеет никакого смысла. Я сделал небольшое демонстрационное приложение, чтобы определить проблему:
Создайте новый проект WPF и вставьте код следующим образом:
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, вставьте ниже значений по умолчанию:
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);
}
}
}
Скопируйте изображение в папку bin/Debug и назовите его 'picture.jpg'
Эта программа ничего не отображает, если только прокомментированная строка не была запрограммирована.
Может кто-нибудь объяснить, что я делаю неправильно, или почему это происходит? Если вы удалите изображение и запустите программу, оно генерирует исключение в строке "int q =...". Если эта строка прокомментирована, программа запускается без исключений, даже если изображение отсутствует. Загрузка изображения только в том случае, если смысл имеет смысл, но тогда изображение должно быть загружено, когда я добавляю элемент управления Image в StackPanel.
Любые ides?
Изменить: Кстати, если вы добавляете изображение в качестве ресурса, строка 'int q =..' не нужна.