#xamarin #binding #imagesource
#xamarin #привязка #imagesource
Вопрос:
Я пытаюсь динамически отображать изображения с помощью привязки:
У меня есть наблюдаемая коллекция TabItem, в которую я загружаю png в свойство Icon:
TabItems.Add(new TabItem()
{
Title = AppResources.Home,
IsSelected = true,
Icon = ImageSource.FromResource("Home.png")
});
Где:
public class TabItem : BindableObject
{
private bool _isSelected;
public ImageSource Icon { get; set; }
public string Title { get; set; }
public bool IsSelected
{
get
{
return _isSelected;
}
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged();
}
}
}
}
И у меня есть DataTemplate TabItem в CollectionView, который отображает эти элементы и использует свойство Icon для привязки к изображению:
<DataTemplate x:DataType="local:TabItem" x:Key="TabItem_DataTemplate">
<StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
WidthRequest="{Binding Title, Converter={StaticResource ProportionateConverter}}"
>
<Image Source="{Binding Icon}" InputTransparent="True" HeightRequest="50" />
<Label HorizontalOptions="Center" VerticalOptions="End" FontSize="Small"
Text="{Binding Title}"
InputTransparent="True"
TextColor="{Binding IsSelected, Converter={StaticResource IsSelectedToTextColorConverter}}"/>
</StackLayout>
</DataTemplate>
Я получаю сообщение об ошибке во время выполнения:
ImageLoaderSourceHandler: Image data was invalid: Xamarin.Forms.StreamImageSource
Изображения находятся в папке Resources и помечены как встроенный ресурс
Обновленное решение: (Спасибо Джейсону)
Решением было использование моего расширения разметки при инициализации свойства Icon (я буду рад услышать о более элегантном способе)
var homeExt = new ImageResourceExtension()
{
Source = "TimeManager.Resources.Icons.Home.png"
};
TabItems.Add(new TabItem()
{
Title = AppResources.Home,
IsSelected = true,
Icon = (ImageSource)(homeExt.ProvideValue(null))
});
Комментарии:
1. измените значок на строку, содержащую имя ресурса
2. Когда я это делаю, я получаю: FileImageSourceHandler: не удалось найти изображение или файл изображения недействителен: File: Home.png
3. если вы жестко
Source="Home.png"
закодируете свой XAML, это работает? Если нет, то есть проблема с вашими изображениями, которую вам нужно исправить в первую очередь4. Нет, здесь та же ошибка. Но когда я использую свое расширение разметки, оно работает: Resources.Home.png}»
5. если ваше изображение в ресурсах общего проекта? Если это так, то вам придется объединить привязку имени ресурса в виде строки с вашим расширением