Вам не нужно делать кастомный контрол для листбокса, такое поведение делается по другому:
1) создаётся класс Anime, в котором нужно указать необходимые свойства аниме - Название, рейтинг, автор, серия, ссылка на скачивание и пр.
2) создаётся вьюмодель окна (или части окна),
2.1) во вьюмодели нужно сделать коллекцию объектов аниме (можно и List, но лучше ObservableCollection)
3) вьюмодель указывается в окно как датаконтекст (тут есть несколько вариантов, ниже покажу самый прсотой вариант)
4) привязать коллекцию аниме к списку ListBox, и указать имя свойства для показа (тут, видимо - Название).
5) всё, список готов - будет видно в окне. Осталось получить конкретный элемент и его свойства - объект класса Anime указано в свойстве DataContext элемента списка (ListBoxItem) и остаётся привести к нужному классу:
var anime = (Anime)AnimeListBox.Items.First().DataContext;
Console.WriteLine(anime.Name + " " + anime.Rating);
class Anime
{
public string Name {get; set;}
public double Rating {get; set;}
public string Author {get; set;}
public string Serie {get; set;}
public string Url {get; set;}
}
class AnimeListViewModel
{
public ObservableCollection<Anime> AnimeList {get; set;} = new ObservableCollection<Anime>
{
new Anime { Name = "Наруто", Rating = 5, Author = "Масаси Кисимото"},
new Anime { Name = "Стальной алхимик", Rating = 5, Author = "Хирому Аракава"},
new Anime { Name = "X", Rating = 5, Author = "CLAMP"},
};
}
<Window ...
xmlns:app="clr-namespace:Anime">
<Window.DataContext>
<app:AnimeListViewModel/>
</Window.DataContext>
<Grid>
<ListBox ItemsSource="{Binding AnimeList}"
DisplayMemberPath="Name"/>
x:Name="AnimeListBox"/>
</Grid>
</Window>