MyPageLeft.vb 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. Public Class MyPageLeft
  2. Inherits Grid
  3. Private Uuid As Integer = GetUuid()
  4. '执行逐个进入动画的控件
  5. Public Property AnimatedControl As FrameworkElement
  6. Get
  7. Return GetValue(AnimatedControlProperty)
  8. End Get
  9. Set(value As FrameworkElement)
  10. SetValue(AnimatedControlProperty, value)
  11. End Set
  12. End Property
  13. Public Shared ReadOnly AnimatedControlProperty As DependencyProperty = DependencyProperty.Register("AnimatedControl", GetType(FrameworkElement), GetType(MyPageLeft), New PropertyMetadata(Nothing))
  14. Public Sub TriggerShowAnimation()
  15. If AnimatedControl Is Nothing Then
  16. '缩放动画
  17. If TypeOf RenderTransform IsNot ScaleTransform Then
  18. RenderTransform = New ScaleTransform(0.96, 0.96)
  19. RenderTransformOrigin = New Point(0.5, 0.5)
  20. End If
  21. Opacity = 0
  22. AniStart({
  23. AaScaleTransform(Me, 1 - CType(RenderTransform, ScaleTransform).ScaleX, 400,, New AniEaseOutBack(2)),
  24. AaOpacity(Me, 1, 100)
  25. }, "PageLeft PageChange " & Uuid)
  26. Else
  27. '逐个进入动画
  28. Dim AniList As New List(Of AniData)
  29. Dim Id As Integer = 0, Delay As Integer = 0
  30. Dim Controls = GetAllAnimControls()
  31. For Each Element As FrameworkElement In Controls
  32. Element.Opacity = 0
  33. Element.RenderTransform = New TranslateTransform(-25, 0)
  34. AniList.Add(AaOpacity(Element, If(TypeOf Element Is TextBlock, 0.6, 1), 200, Delay, New AniEaseOutFluent(AniEasePower.Weak)))
  35. AniList.Add(AaTranslateX(Element, 5, 200, Delay, New AniEaseOutFluent))
  36. AniList.Add(AaTranslateX(Element, 20, 300, Delay, New AniEaseOutBack(AniEasePower.Weak)))
  37. If TypeOf Element Is MyListItem Then
  38. AniList.Add(AaCode(Sub()
  39. CType(Element, MyListItem).IsMouseOverAnimationEnabled = True
  40. CType(Element, MyListItem).RefreshColor(Me, New EventArgs)
  41. End Sub, Delay + 280))
  42. End If
  43. Delay += Math.Max(8, 20 - Id) * 2.5
  44. Id += 1
  45. Next
  46. AniStart(AniList, "PageLeft PageChange " & Uuid)
  47. End If
  48. End Sub
  49. Public Sub TriggerHideAnimation()
  50. If AnimatedControl Is Nothing Then
  51. '缩放动画
  52. If TypeOf RenderTransform IsNot ScaleTransform Then
  53. RenderTransform = New ScaleTransform(1, 1)
  54. RenderTransformOrigin = New Point(0.5, 0.5)
  55. End If
  56. AniStart({
  57. AaScaleTransform(Me, 0.95 - CType(RenderTransform, ScaleTransform).ScaleX, 130,, New AniEaseInFluent(AniEasePower.Weak)),
  58. AaOpacity(Me, -Opacity, 100, 30)
  59. }, "PageLeft PageChange " & Uuid)
  60. Else
  61. '逐个退出动画
  62. Dim AniList As New List(Of AniData)
  63. Dim Id As Integer = 0
  64. Dim Controls = GetAllAnimControls()
  65. For Each Element As FrameworkElement In Controls
  66. AniList.Add(AaOpacity(Element, -Element.Opacity, 60, 80 / Controls.Count * Id))
  67. AniList.Add(AaTranslateX(Element, -6, 60, 80 / Controls.Count * Id))
  68. Id += 1
  69. Next
  70. AniStart(AniList, "PageLeft PageChange " & Uuid)
  71. End If
  72. End Sub
  73. '遍历获取所有需要生成动画的控件
  74. Private Function GetAllAnimControls() As List(Of FrameworkElement)
  75. Dim AllControls As New List(Of FrameworkElement)
  76. GetAllAnimControls(AnimatedControl, AllControls)
  77. Return AllControls
  78. End Function
  79. Private Sub GetAllAnimControls(Element As FrameworkElement, ByRef AllControls As List(Of FrameworkElement))
  80. If Element.Visibility = Visibility.Collapsed Then Exit Sub
  81. If TypeOf Element Is MyTextButton Then
  82. AllControls.Add(Element)
  83. ElseIf TypeOf Element Is MyListItem Then
  84. CType(Element, MyListItem).IsMouseOverAnimationEnabled = False
  85. AllControls.Add(Element)
  86. ElseIf TypeOf Element Is ContentControl Then
  87. GetAllAnimControls(CType(Element, ContentControl).Content, AllControls)
  88. ElseIf TypeOf Element Is Panel Then
  89. For Each Element2 As FrameworkElement In CType(Element, Panel).Children
  90. GetAllAnimControls(Element2, AllControls)
  91. Next
  92. Else
  93. AllControls.Add(Element)
  94. End If
  95. End Sub
  96. End Class