MyTextButton.vb 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. Public Class MyTextButton
  2. Inherits Label
  3. Public Event Click(sender As Object, e As EventArgs)
  4. '基础
  5. Public Uuid As Integer = GetUuid()
  6. Public Sub New()
  7. SetResourceReference(ForegroundProperty, "ColorBrush1")
  8. Background = ColorSemiTransparent
  9. End Sub
  10. '文本
  11. Public Property Text As String
  12. Get
  13. Return GetValue(TextProperty)
  14. End Get
  15. Set(value As String)
  16. SetValue(TextProperty, value)
  17. End Set
  18. End Property
  19. Public Shared ReadOnly TextProperty As DependencyProperty =
  20. DependencyProperty.Register("Text", GetType(String), GetType(MyTextButton), New PropertyMetadata("", Sub(sender As MyTextButton, e As DependencyPropertyChangedEventArgs)
  21. If Not e.OldValue = e.NewValue Then
  22. AniStart({
  23. AaOpacity(sender, -sender.Opacity, 50),
  24. AaCode(Sub() sender.Content = e.NewValue,, True),
  25. AaOpacity(sender, 1, 170)
  26. }, "MyTextButton Text " & sender.Uuid)
  27. End If
  28. End Sub))
  29. '鼠标事件
  30. Public IsMouseDown As Boolean = False
  31. Private Sub MyTextButton_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseLeftButtonDown
  32. IsMouseDown = True
  33. e.Handled = True
  34. End Sub
  35. Private Sub MyTextButton_MouseLeave() Handles Me.MouseLeave
  36. IsMouseDown = False
  37. End Sub
  38. Private Sub MyTextButton_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseLeftButtonUp
  39. If IsMouseDown Then
  40. IsMouseDown = False
  41. Log("[Control] 按下文本按钮:" & Text)
  42. RaiseEvent Click(Me, Nothing)
  43. ModEvent.TryStartEvent(EventType, EventData)
  44. e.Handled = True
  45. End If
  46. End Sub
  47. '指向动画
  48. Private Const AnimationTimeIn As Integer = 100
  49. Private Const AnimationTimeOut As Integer = 200
  50. Private ColorName As String
  51. Private Sub RefreshColor() Handles Me.MouseEnter, Me.MouseLeave, Me.IsEnabledChanged, Me.MouseLeftButtonDown, Me.MouseLeftButtonUp
  52. '判断当前颜色
  53. Dim ForeName As String
  54. Dim Time As Integer
  55. If IsMouseDown Then
  56. ForeName = "ColorBrush4"
  57. Time = 30
  58. ElseIf IsMouseOver Then
  59. ForeName = "ColorBrush3"
  60. Time = AnimationTimeIn
  61. Else
  62. ForeName = "ColorBrush1"
  63. Time = AnimationTimeOut
  64. End If
  65. '重复性验证
  66. If ColorName = ForeName Then Exit Sub
  67. ColorName = ForeName
  68. '触发颜色动画
  69. If IsLoaded AndAlso AniControlEnabled = 0 Then '防止默认属性变更触发动画
  70. '有动画
  71. AniStart(AaColor(Me, ForegroundProperty, ForeName, Time), "MyTextButton Color " & Uuid)
  72. Else
  73. '无动画
  74. AniStop("MyTextButton Color " & Uuid)
  75. SetResourceReference(ForegroundProperty, ForeName)
  76. End If
  77. End Sub
  78. '实现自定义事件
  79. Public Property EventType As String
  80. Get
  81. Return GetValue(EventTypeProperty)
  82. End Get
  83. Set(value As String)
  84. SetValue(EventTypeProperty, value)
  85. End Set
  86. End Property
  87. Public Shared ReadOnly EventTypeProperty As DependencyProperty = DependencyProperty.Register(
  88. "EventType", GetType(String), GetType(MyTextButton), New PropertyMetadata(Nothing))
  89. Public Property EventData As String
  90. Get
  91. Return GetValue(EventDataProperty)
  92. End Get
  93. Set(value As String)
  94. SetValue(EventDataProperty, value)
  95. End Set
  96. End Property
  97. Public Shared ReadOnly EventDataProperty As DependencyProperty = DependencyProperty.Register(
  98. "EventData", GetType(String), GetType(MyTextButton), New PropertyMetadata(Nothing))
  99. End Class