CarouselPageEventsPage.xaml.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using System.Collections.Generic;
  3. using Avalonia.Collections;
  4. using Avalonia.Controls;
  5. using Avalonia.Interactivity;
  6. namespace ControlCatalog.Pages
  7. {
  8. public partial class CarouselPageEventsPage : UserControl
  9. {
  10. private readonly List<string> _log = new();
  11. public CarouselPageEventsPage()
  12. {
  13. InitializeComponent();
  14. Loaded += OnLoaded;
  15. Unloaded += OnUnloaded;
  16. }
  17. private void OnLoaded(object? sender, RoutedEventArgs e)
  18. {
  19. var pageNames = new[] { "Home", "Explore", "Library", "Profile" };
  20. for (int i = 0; i < pageNames.Length; i++)
  21. {
  22. var name = pageNames[i];
  23. var page = new ContentPage
  24. {
  25. Header = name,
  26. Background = NavigationDemoHelper.GetPageBrush(i),
  27. Content = new TextBlock
  28. {
  29. Text = $"{name}",
  30. FontSize = 28,
  31. FontWeight = Avalonia.Media.FontWeight.Bold,
  32. HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
  33. VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center
  34. },
  35. HorizontalContentAlignment = Avalonia.Layout.HorizontalAlignment.Stretch,
  36. VerticalContentAlignment = Avalonia.Layout.VerticalAlignment.Stretch
  37. };
  38. page.NavigatedTo += (_, args) =>
  39. AppendLog($"NavigatedTo: {name} (from {(args.PreviousPage as ContentPage)?.Header ?? "—"})");
  40. page.NavigatedFrom += (_, args) =>
  41. AppendLog($"NavigatedFrom: {name} (to {(args.DestinationPage as ContentPage)?.Header ?? "—"})");
  42. ((Avalonia.Collections.AvaloniaList<Page>)DemoCarousel.Pages!).Add(page);
  43. }
  44. DemoCarousel.SelectionChanged += OnSelectionChanged;
  45. }
  46. private void OnSelectionChanged(object? sender, PageSelectionChangedEventArgs e)
  47. {
  48. AppendLog($"SelectionChanged: {(e.PreviousPage as ContentPage)?.Header ?? "—"} → {(e.CurrentPage as ContentPage)?.Header ?? "—"}");
  49. }
  50. private void OnPrevious(object? sender, RoutedEventArgs e)
  51. {
  52. if (DemoCarousel.SelectedIndex > 0)
  53. DemoCarousel.SelectedIndex--;
  54. }
  55. private void OnNext(object? sender, RoutedEventArgs e)
  56. {
  57. var pageCount = ((AvaloniaList<Page>)DemoCarousel.Pages!).Count;
  58. if (DemoCarousel.SelectedIndex < pageCount - 1)
  59. DemoCarousel.SelectedIndex++;
  60. }
  61. private void OnUnloaded(object? sender, RoutedEventArgs e)
  62. {
  63. DemoCarousel.SelectionChanged -= OnSelectionChanged;
  64. }
  65. private void OnClearLog(object? sender, RoutedEventArgs e)
  66. {
  67. _log.Clear();
  68. EventLog.Text = string.Empty;
  69. }
  70. private void AppendLog(string message)
  71. {
  72. var timestamp = DateTime.Now.ToString("HH:mm:ss.fff");
  73. _log.Add($"[{timestamp}] {message}");
  74. if (_log.Count > 50)
  75. _log.RemoveAt(0);
  76. EventLog.Text = string.Join(Environment.NewLine, _log);
  77. LogScrollViewer.ScrollToEnd();
  78. }
  79. }
  80. }