NavigationPageTransitionsPage.xaml.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Threading.Tasks;
  3. using Avalonia.Animation;
  4. using Avalonia.Controls;
  5. using Avalonia.Interactivity;
  6. namespace ControlCatalog.Pages
  7. {
  8. public partial class NavigationPageTransitionsPage : UserControl
  9. {
  10. private bool _initialized;
  11. private int _pageCount;
  12. public NavigationPageTransitionsPage()
  13. {
  14. InitializeComponent();
  15. Loaded += OnLoaded;
  16. }
  17. private async void OnLoaded(object? sender, RoutedEventArgs e)
  18. {
  19. if (_initialized)
  20. {
  21. UpdateTransition();
  22. return;
  23. }
  24. _initialized = true;
  25. await DemoNav.PushAsync(NavigationDemoHelper.MakePage("Transitions", "Choose a transition type and push pages.", 0), null);
  26. UpdateTransition();
  27. }
  28. private void OnTransitionChanged(object? sender, SelectionChangedEventArgs e) => UpdateTransition();
  29. private void OnDurationChanged(object? sender, Avalonia.Controls.Primitives.RangeBaseValueChangedEventArgs e)
  30. {
  31. if (DurationLabel == null)
  32. return;
  33. DurationLabel.Text = $"{(int)DurationSlider.Value} ms";
  34. UpdateTransition();
  35. }
  36. private async void OnPush(object? sender, RoutedEventArgs e)
  37. {
  38. _pageCount++;
  39. await DemoNav.PushAsync(NavigationDemoHelper.MakePage($"Page {_pageCount}", $"Pushed with {GetTransitionName()}.", _pageCount));
  40. }
  41. private async void OnPop(object? sender, RoutedEventArgs e) => await DemoNav.PopAsync();
  42. private void UpdateTransition()
  43. {
  44. if (DemoNav == null)
  45. return;
  46. var duration = TimeSpan.FromMilliseconds(DurationSlider.Value);
  47. DemoNav.PageTransition = TransitionCombo.SelectedIndex switch
  48. {
  49. 1 => new PageSlide(duration, PageSlide.SlideAxis.Horizontal),
  50. 3 => new ParallaxSlideTransition(duration),
  51. 4 => new CrossFade(duration),
  52. 5 => new FadeThroughTransition(duration),
  53. 6 => new PageSlideTransition(duration, PageSlideTransition.SlideAxis.Horizontal),
  54. 7 => new PageSlideTransition(duration, PageSlideTransition.SlideAxis.Vertical),
  55. 8 => new CompositeTransition(duration),
  56. 9 => null,
  57. _ => new PageSlide(duration, PageSlide.SlideAxis.Horizontal)
  58. };
  59. }
  60. private string GetTransitionName() => TransitionCombo.SelectedIndex switch
  61. {
  62. 1 => "Page Slide",
  63. 3 => "Parallax Slide",
  64. 4 => "Cross Fade",
  65. 5 => "Fade Through",
  66. 6 => "Page Slide (Horizontal)",
  67. 7 => "Page Slide (Vertical)",
  68. 8 => "Composite (Slide + Fade)",
  69. 9 => "no transition",
  70. _ => "Page Slide"
  71. };
  72. }
  73. }