CarouselTransitionsPage.xaml.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using Avalonia.Animation;
  3. using Avalonia.Controls;
  4. using ControlCatalog.Pages.Transitions;
  5. namespace ControlCatalog.Pages
  6. {
  7. public partial class CarouselTransitionsPage : UserControl
  8. {
  9. public CarouselTransitionsPage()
  10. {
  11. InitializeComponent();
  12. PreviousButton.Click += (_, _) => DemoCarousel.Previous();
  13. NextButton.Click += (_, _) => DemoCarousel.Next();
  14. TransitionCombo.SelectionChanged += (_, _) => ApplyTransition();
  15. OrientationCombo.SelectionChanged += (_, _) => ApplyTransition();
  16. }
  17. private void ApplyTransition()
  18. {
  19. var axis = OrientationCombo.SelectedIndex == 0 ?
  20. PageSlide.SlideAxis.Horizontal :
  21. PageSlide.SlideAxis.Vertical;
  22. var label = axis == PageSlide.SlideAxis.Horizontal ? "Horizontal" : "Vertical";
  23. switch (TransitionCombo.SelectedIndex)
  24. {
  25. case 0:
  26. DemoCarousel.PageTransition = null;
  27. StatusText.Text = "Transition: None";
  28. break;
  29. case 1:
  30. DemoCarousel.PageTransition = new PageSlide(TimeSpan.FromSeconds(0.25), axis);
  31. StatusText.Text = $"Transition: Page Slide ({label})";
  32. break;
  33. case 2:
  34. DemoCarousel.PageTransition = new CrossFade(TimeSpan.FromSeconds(0.25));
  35. StatusText.Text = "Transition: Cross Fade";
  36. break;
  37. case 3:
  38. DemoCarousel.PageTransition = new Rotate3DTransition(TimeSpan.FromSeconds(0.5), axis);
  39. StatusText.Text = $"Transition: Rotate 3D ({label})";
  40. break;
  41. case 4:
  42. DemoCarousel.PageTransition = new CardStackPageTransition(TimeSpan.FromSeconds(0.5), axis);
  43. StatusText.Text = $"Transition: Card Stack ({label})";
  44. break;
  45. case 5:
  46. DemoCarousel.PageTransition = new WaveRevealPageTransition(TimeSpan.FromSeconds(0.8), axis);
  47. StatusText.Text = $"Transition: Wave Reveal ({label})";
  48. break;
  49. case 6:
  50. DemoCarousel.PageTransition = new CompositePageTransition
  51. {
  52. PageTransitions =
  53. {
  54. new PageSlide(TimeSpan.FromSeconds(0.25), axis),
  55. new CrossFade(TimeSpan.FromSeconds(0.25)),
  56. }
  57. };
  58. StatusText.Text = "Transition: Composite (Slide + Fade)";
  59. break;
  60. }
  61. }
  62. }
  63. }