У меня XAMl вот так
<Image x:Name="MyImage">
<Image.Source>
<BitmapImage UriSource="{Binding FullPhotoPath}" CacheOption="OnLoad" />
</Image.Source>
</Image>
Это работает отлично, пока существует FullPhotoPath. если нет, то это исключает
Инициализация "System.Windows.Media.Imaging.BitmapImage" сделала исключение.
Я понимаю, что могу использовать только тег Image
Чтобы показать изображение, и если оно не существует, ничего не отображается (и не генерируется исключение), но насколько я могу сказать, этот синтаксис не позволяет мне использовать CacheOption
.
Как я могу ничего не показать, если путь к изображению не существует?
Вы можете использовать конвертер для создания своего BitmapImage с любыми параметрами, которые вам нужны, которые также могут просто вернуть null, если вы видите, что файл не существует, а затем просто привязывайте Image.Source через конвертер.
public class PathToBitmapImagelConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string path = value as string;
if (path == null || !File.Exists(path))
return null;
var bmp = new BitmapImage();
bmp.BeginInit();
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.UriSource = new Uri(path, UriKind.RelativeOrAbsolute);
bmp.EndInit();
return bmp;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Сделать конвертер доступным где-нибудь
<local:PathToBitmapImagelConverter x:Key="PathToBitmapImagelConverter"/>
Затем используйте в своем XAML, как
<Image x:Name="MyImage" Source="{Binding FullPhotoPath, Converter={StaticResource PathToBitmapImagelConverter}}"/>
Default
. Мне нужно было использовать BeginInit
/ EndInit
чтобы он вступил в силу. Я собираюсь отредактировать ваш ответ, если вы не возражаете.