| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 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(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(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
|