A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

60 lines
2.0 KiB

using System;
using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
namespace ControlCatalog.Pages;
public partial class AvaloniaFlixDetailView : UserControl
{
static readonly string[] MovieAssets =
{
"avares://ControlCatalog/Assets/Movies/trending1.jpg",
"avares://ControlCatalog/Assets/Movies/trending2.jpg",
"avares://ControlCatalog/Assets/Movies/toprated1.jpg",
"avares://ControlCatalog/Assets/Movies/toprated2.jpg",
"avares://ControlCatalog/Assets/Movies/toprated3.jpg",
"avares://ControlCatalog/Assets/Movies/toprated4.jpg",
"avares://ControlCatalog/Assets/Movies/continue1.jpg",
"avares://ControlCatalog/Assets/Movies/morelike1.jpg",
"avares://ControlCatalog/Assets/Movies/search1.jpg",
"avares://ControlCatalog/Assets/Movies/hero.jpg",
"avares://ControlCatalog/Assets/Movies/cast1.jpg",
"avares://ControlCatalog/Assets/Movies/cast2.jpg",
};
public AvaloniaFlixDetailView() => InitializeComponent();
public AvaloniaFlixDetailView(string movieTitle)
{
InitializeComponent();
HeroTitleLabel.Text = movieTitle;
var rng = new Random(movieTitle.GetHashCode());
int imgIdx = Math.Abs(movieTitle.GetHashCode()) % MovieAssets.Length;
string year = (2020 + rng.Next(6)).ToString();
string rating = $"{6.5 + rng.NextDouble() * 3.0:F1}/10";
int mins = 90 + rng.Next(60);
string duration = $"{mins / 60}h {mins % 60}m";
YearLabel.Text = year;
RatingLabel.Text = rating;
DurationLabel.Text = duration;
try
{
var uri = new Uri(MovieAssets[imgIdx]);
HeroBg.Background = new ImageBrush(new Bitmap(AssetLoader.Open(uri)))
{
Stretch = Stretch.UniformToFill,
};
}
catch
{
HeroBg.Background = new SolidColorBrush(Color.Parse("#111111"));
}
}
}