Public Class MyTextButton Inherits Label Public Event Click(sender As Object, e As EventArgs) '基础 Public Uuid As Integer = GetUuid() Public Sub New() SetResourceReference(ForegroundProperty, "ColorBrush1") Background = ColorSemiTransparent End Sub '文本 Public Property Text As String Get Return GetValue(TextProperty) End Get Set(value As String) SetValue(TextProperty, value) End Set End Property Public Shared ReadOnly TextProperty As DependencyProperty = DependencyProperty.Register("Text", GetType(String), GetType(MyTextButton), New PropertyMetadata("", Sub(sender As MyTextButton, e As DependencyPropertyChangedEventArgs) If Not e.OldValue = e.NewValue Then AniStart({ AaOpacity(sender, -sender.Opacity, 50), AaCode(Sub() sender.Content = e.NewValue,, True), AaOpacity(sender, 1, 170) }, "MyTextButton Text " & sender.Uuid) End If End Sub)) '鼠标事件 Public IsMouseDown As Boolean = False Private Sub MyTextButton_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseLeftButtonDown IsMouseDown = True e.Handled = True End Sub Private Sub MyTextButton_MouseLeave() Handles Me.MouseLeave IsMouseDown = False End Sub Private Sub MyTextButton_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseLeftButtonUp If IsMouseDown Then IsMouseDown = False Log("[Control] 按下文本按钮:" & Text) RaiseEvent Click(Me, Nothing) ModEvent.TryStartEvent(EventType, EventData) e.Handled = True End If End Sub '指向动画 Private Const AnimationTimeIn As Integer = 100 Private Const AnimationTimeOut As Integer = 200 Private ColorName As String Private Sub RefreshColor() Handles Me.MouseEnter, Me.MouseLeave, Me.IsEnabledChanged, Me.MouseLeftButtonDown, Me.MouseLeftButtonUp '判断当前颜色 Dim ForeName As String Dim Time As Integer If IsMouseDown Then ForeName = "ColorBrush4" Time = 30 ElseIf IsMouseOver Then ForeName = "ColorBrush3" Time = AnimationTimeIn Else ForeName = "ColorBrush1" Time = AnimationTimeOut End If '重复性验证 If ColorName = ForeName Then Exit Sub ColorName = ForeName '触发颜色动画 If IsLoaded AndAlso AniControlEnabled = 0 Then '防止默认属性变更触发动画 '有动画 AniStart(AaColor(Me, ForegroundProperty, ForeName, Time), "MyTextButton Color " & Uuid) Else '无动画 AniStop("MyTextButton Color " & Uuid) SetResourceReference(ForegroundProperty, ForeName) End If End Sub '实现自定义事件 Public Property EventType As String Get Return GetValue(EventTypeProperty) End Get Set(ByVal value As String) SetValue(EventTypeProperty, value) End Set End Property Public Shared ReadOnly EventTypeProperty As DependencyProperty = DependencyProperty.Register("EventType", GetType(String), GetType(MyTextButton), New PropertyMetadata(Nothing)) Public Property EventData As String Get Return GetValue(EventDataProperty) End Get Set(ByVal value As String) SetValue(EventDataProperty, value) End Set End Property Public Shared ReadOnly EventDataProperty As DependencyProperty = DependencyProperty.Register("EventData", GetType(String), GetType(MyTextButton), New PropertyMetadata(Nothing)) End Class