From 8924a0bbed5cac63931622432c55485ad3c766ee Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Sun, 18 May 2025 22:05:25 +0800 Subject: [PATCH] feat: add about us page. --- demo/Ursa.Demo/Pages/AboutUsDemo.axaml | 234 ++++++++++++++++++ demo/Ursa.Demo/Pages/AboutUsDemo.axaml.cs | 25 ++ .../ViewModels/AboutUsDemoViewModel.cs | 37 +++ .../Ursa.Demo/ViewModels/MainViewViewModel.cs | 1 + demo/Ursa.Demo/ViewModels/MenuViewModel.cs | 2 + 5 files changed, 299 insertions(+) create mode 100644 demo/Ursa.Demo/Pages/AboutUsDemo.axaml create mode 100644 demo/Ursa.Demo/Pages/AboutUsDemo.axaml.cs create mode 100644 demo/Ursa.Demo/ViewModels/AboutUsDemoViewModel.cs diff --git a/demo/Ursa.Demo/Pages/AboutUsDemo.axaml b/demo/Ursa.Demo/Pages/AboutUsDemo.axaml new file mode 100644 index 0000000..b63fe36 --- /dev/null +++ b/demo/Ursa.Demo/Pages/AboutUsDemo.axaml @@ -0,0 +1,234 @@ + + + + + + + #FFFDB7A5 + #FFF6A0B5 + #FFDD9BE0 + #FFC4A7E9 + #FFA7B3E1 + #FF98CDFD + #FF95D8F8 + + + + + + + + + + + #FFB42019 + #FFA41751 + #FF731F8A + #FF582EA0 + #FF29368E + #FF135CB8 + #FF0366A9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/Ursa.Demo/Pages/AboutUsDemo.axaml.cs b/demo/Ursa.Demo/Pages/AboutUsDemo.axaml.cs new file mode 100644 index 0000000..4062b24 --- /dev/null +++ b/demo/Ursa.Demo/Pages/AboutUsDemo.axaml.cs @@ -0,0 +1,25 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Markup.Xaml; +using Ursa.Demo.ViewModels; + +namespace Ursa.Demo.Pages; + +public partial class AboutUsDemo : UserControl +{ + public AboutUsDemo() + { + InitializeComponent(); + } + + protected override void OnLoaded(RoutedEventArgs e) + { + base.OnLoaded(e); + if (DataContext is AboutUsDemoViewModel vm) + { + var launcher = TopLevel.GetTopLevel(this)?.Launcher; + vm.Launcher = launcher; + } + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/ViewModels/AboutUsDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/AboutUsDemoViewModel.cs new file mode 100644 index 0000000..c4e7fc6 --- /dev/null +++ b/demo/Ursa.Demo/ViewModels/AboutUsDemoViewModel.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Windows.Input; +using Avalonia.Platform.Storage; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; + +namespace Ursa.Demo.ViewModels; + +public partial class AboutUsDemoViewModel: ObservableObject +{ + public ICommand NavigateCommand { get; set; } + + internal ILauncher? Launcher { get; set; } + + public AboutUsDemoViewModel() + { + NavigateCommand = new AsyncRelayCommand(OnNavigateAsync); + } + + private static readonly IReadOnlyDictionary _keyToUrlMapping = new Dictionary() + { + ["semi"] = "https://github.com/irihitech/Semi.Avalonia", + ["ursa"] = "https://github.com/irihitech/Ursa.Avalonia", + ["mantra"] = "https://www.bilibili.com/video/BV15pfKYbEEQ", + }; + + private async Task OnNavigateAsync(string? arg) + { + if (Launcher is not null && arg is not null && _keyToUrlMapping.TryGetValue(arg.ToLower(), out var uri)) + { + await Launcher.LaunchUriAsync(new Uri(uri)); + } + + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs index e591d80..361b236 100644 --- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs @@ -35,6 +35,7 @@ public partial class MainViewViewModel : ViewModelBase Content = s switch { MenuKeys.MenuKeyIntroduction => new IntroductionDemoViewModel(), + MenuKeys.MenuKeyAboutUs => new AboutUsDemoViewModel(), MenuKeys.MenuKeyAutoCompleteBox => new AutoCompleteBoxDemoViewModel(), MenuKeys.MenuKeyAvatar => new AvatarDemoViewModel(), MenuKeys.MenuKeyBadge => new BadgeDemoViewModel(), diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs index 7dfffbd..14f4e60 100644 --- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs @@ -9,6 +9,7 @@ public class MenuViewModel : ViewModelBase MenuItems = new ObservableCollection { new() { MenuHeader = "Introduction", Key = MenuKeys.MenuKeyIntroduction, IsSeparator = false }, + new() { MenuHeader = "About Us", Key = MenuKeys.MenuKeyAboutUs, IsSeparator = false }, new() { MenuHeader = "Controls", IsSeparator = true }, new() { @@ -102,6 +103,7 @@ public class MenuViewModel : ViewModelBase public static class MenuKeys { public const string MenuKeyIntroduction = "Introduction"; + public const string MenuKeyAboutUs = "AboutUs"; public const string MenuKeyAutoCompleteBox = "AutoCompleteBox"; public const string MenuKeyAvatar = "Avatar"; public const string MenuKeyBadge = "Badge";