NavigationPageModalPage.xaml.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using Avalonia.Animation;
  3. using Avalonia.Controls;
  4. using Avalonia.Interactivity;
  5. namespace ControlCatalog.Pages
  6. {
  7. public partial class NavigationPageModalPage : UserControl
  8. {
  9. private bool _initialized;
  10. private int _modalCount;
  11. public NavigationPageModalPage()
  12. {
  13. InitializeComponent();
  14. Loaded += OnLoaded;
  15. }
  16. private async void OnLoaded(object? sender, RoutedEventArgs e)
  17. {
  18. if (_initialized)
  19. return;
  20. _initialized = true;
  21. await DemoNav.PushAsync(NavigationDemoHelper.MakePage("Home", "Use Push Modal to show a modal on top.", 0), null);
  22. }
  23. private async void OnPushModal(object? sender, RoutedEventArgs e)
  24. {
  25. _modalCount++;
  26. var modal = NavigationDemoHelper.MakePage($"Modal {_modalCount}", "This page was presented modally.\nTap 'Pop Modal' to dismiss.", _modalCount);
  27. await DemoNav.PushModalAsync(modal);
  28. UpdateStatus();
  29. }
  30. private async void OnPopModal(object? sender, RoutedEventArgs e)
  31. {
  32. await DemoNav.PopModalAsync();
  33. UpdateStatus();
  34. }
  35. private async void OnPopAllModals(object? sender, RoutedEventArgs e)
  36. {
  37. await DemoNav.PopAllModalsAsync();
  38. _modalCount = 0;
  39. UpdateStatus();
  40. }
  41. private void OnTransitionChanged(object? sender, SelectionChangedEventArgs e)
  42. {
  43. if (DemoNav == null)
  44. return;
  45. DemoNav.ModalTransition = TransitionCombo.SelectedIndex switch
  46. {
  47. 1 => new CrossFade(TimeSpan.FromMilliseconds(250)),
  48. 2 => null,
  49. _ => new PageSlide(TimeSpan.FromMilliseconds(300), PageSlide.SlideAxis.Vertical)
  50. };
  51. }
  52. private void UpdateStatus()
  53. {
  54. StatusText.Text = $"Modals: {DemoNav.ModalStack.Count}";
  55. }
  56. }
  57. }