Картинка по умолчанию Silverlight 4
Думаю, у многих появляется ситуация с условием если картинки нету или картинка не загрузилась, указать defualt картинку.
Первое что приходит в голову это использовать Convert который будет заниматься этим делом.
Но увы я оказался не прав, этот вариант не очень хороший. Так как для этого действия есть специальное средство.
Есть у контрола Image событие ImageFailed – который происходит, когда картинка не загрузиться.
Использование:
<Image MaxHeight="50" x:Name="image" Source="{Binding photo">
<i:Interaction.Triggers>
<i:EventTrigger EventName="ImageFailed">
<ei:ChangePropertyAction PropertyName="Source">
<ei:ChangePropertyAction.Value>
<ImageSource>
/images/noimage.png
</ImageSource>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
Первое маленькое замечание, но важное.
Если ваша картинка находиться в интернете, т.е ссылка начинается http\www, то будет задержка на, то что бы отправить запрос и получить ответ, и только после этого будет отображена стандартная картинка.
И второе замечание.
Если путь к картинке будет равна null или String.Empty, то событие вообще не сработает.
Есть не сколько способов исправить это, я решил написать конвертор. Который если что то не так возвращает строку, которая обязательно не должна являться ссылкой, что бы не попасть под первое замечание.
Код конвертора:
public class ConvertNullImage : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || value.ToString() == "")
return "bad";
return value;
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
throw new NotImplementedException();
}
}