ContentPageFirstLookPage.xaml.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Threading.Tasks;
  2. using Avalonia.Controls;
  3. using Avalonia.Interactivity;
  4. using Avalonia.Layout;
  5. using Avalonia.Media;
  6. namespace ControlCatalog.Pages
  7. {
  8. public partial class ContentPageFirstLookPage : UserControl
  9. {
  10. private static readonly Color[] PageColors =
  11. [
  12. Color.FromRgb(0xE3, 0xF2, 0xFD), // blue
  13. Color.FromRgb(0xF3, 0xE5, 0xF5), // purple
  14. Color.FromRgb(0xE8, 0xF5, 0xE9), // green
  15. Color.FromRgb(0xFF, 0xF8, 0xE1), // amber
  16. Color.FromRgb(0xFB, 0xE9, 0xE7), // deep orange
  17. ];
  18. private int _pageCount;
  19. public ContentPageFirstLookPage()
  20. {
  21. InitializeComponent();
  22. Loaded += OnLoaded;
  23. }
  24. private async void OnLoaded(object? sender, RoutedEventArgs e)
  25. {
  26. await DemoNav.PushAsync(MakePage("Root Page", "ContentPage inside a NavigationPage.\nUse the options to navigate."));
  27. UpdateStatus();
  28. }
  29. private async void OnPush(object? sender, RoutedEventArgs e)
  30. {
  31. _pageCount++;
  32. await DemoNav.PushAsync(MakePage($"Page {_pageCount}", $"ContentPage #{_pageCount}.\nNavigate back using the back button."));
  33. UpdateStatus();
  34. }
  35. private async void OnPop(object? sender, RoutedEventArgs e)
  36. {
  37. await DemoNav.PopAsync();
  38. UpdateStatus();
  39. }
  40. private async void OnPopToRoot(object? sender, RoutedEventArgs e)
  41. {
  42. await DemoNav.PopToRootAsync();
  43. _pageCount = 0;
  44. UpdateStatus();
  45. }
  46. private void UpdateStatus()
  47. {
  48. StatusText.Text = $"Depth: {DemoNav.StackDepth} | Current: {DemoNav.CurrentPage?.Header}";
  49. }
  50. private ContentPage MakePage(string header, string body) =>
  51. new ContentPage
  52. {
  53. Header = header,
  54. Background = new SolidColorBrush(PageColors[_pageCount % PageColors.Length]),
  55. Content = new StackPanel
  56. {
  57. HorizontalAlignment = HorizontalAlignment.Center,
  58. VerticalAlignment = VerticalAlignment.Center,
  59. Spacing = 10,
  60. Children =
  61. {
  62. new TextBlock
  63. {
  64. Text = header,
  65. FontSize = 20,
  66. FontWeight = FontWeight.SemiBold,
  67. HorizontalAlignment = HorizontalAlignment.Center
  68. },
  69. new TextBlock
  70. {
  71. Text = body,
  72. FontSize = 13,
  73. Opacity = 0.7,
  74. TextWrapping = TextWrapping.Wrap,
  75. TextAlignment = TextAlignment.Center,
  76. MaxWidth = 260
  77. }
  78. }
  79. },
  80. HorizontalContentAlignment = HorizontalAlignment.Stretch,
  81. VerticalContentAlignment = VerticalAlignment.Stretch
  82. };
  83. }
  84. }