MyComboBoxItem.vb 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. Public Class MyComboBoxItem
  2. Inherits ComboBoxItem
  3. '基础
  4. Public Uuid As Integer = GetUuid()
  5. Public Sub New()
  6. Style = FindResource("MyComboBoxItem")
  7. End Sub
  8. '指向动画
  9. Private Const AnimationTimeIn As Integer = 100
  10. Private Const AnimationTimeOut As Integer = 300
  11. Private BackColorName As String, FontOpacity As Double
  12. Private Sub RefreshColor() Handles Me.Unselected, Me.MouseMove, Me.MouseLeave, Me.Selected, Me.IsEnabledChanged
  13. '判断当前颜色
  14. Dim NewBackColorName As String, NewFontOpacity As Double
  15. Dim Time As Integer
  16. If IsSelected Then
  17. NewBackColorName = "ColorBrush6"
  18. NewFontOpacity = 1
  19. Time = AnimationTimeIn
  20. ElseIf IsMouseOver Then
  21. NewBackColorName = "ColorBrush8"
  22. NewFontOpacity = 1
  23. Time = AnimationTimeIn
  24. ElseIf IsEnabled Then
  25. NewBackColorName = "ColorBrushTransparent"
  26. NewFontOpacity = 1
  27. Time = AnimationTimeOut
  28. Else
  29. NewBackColorName = "ColorBrushTransparent"
  30. NewFontOpacity = 0.4
  31. Time = AnimationTimeOut
  32. End If
  33. If BackColorName = NewBackColorName AndAlso FontOpacity = NewFontOpacity Then Return
  34. BackColorName = NewBackColorName
  35. FontOpacity = NewFontOpacity
  36. '触发颜色动画
  37. If IsLoaded AndAlso AniControlEnabled = 0 Then '防止默认属性变更触发动画
  38. '有动画
  39. AniStart({
  40. AaColor(Me, BackgroundProperty, BackColorName, Time),
  41. AaOpacity(Me, FontOpacity - Opacity, Time)
  42. }, "ComboBoxItem Color " & Uuid)
  43. Else
  44. '无动画
  45. AniStop("ComboBoxItem Color " & Uuid)
  46. SetResourceReference(BackgroundProperty, BackColorName)
  47. Opacity = FontOpacity
  48. End If
  49. End Sub
  50. Public Overrides Function Tostring() As String
  51. Return Content.ToString
  52. End Function
  53. Public Shared Widening Operator CType(Value As MyComboBoxItem) As String
  54. Return Value.Content.ToString
  55. End Operator
  56. Private Sub MyComboBoxItem_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonUp
  57. Logger.Info($"选择下拉列表项:{Tostring()}")
  58. End Sub
  59. End Class