| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- Public Class Selecter
- Public Event SelectionChange(ByVal Selection As String)
- Public Event Click(ByVal Selection As String, ByVal Index As Integer)
- Public NowSelect As New Label
- #Region "属性"
- '线条宽度
- Public Property LineWidth As Integer
- Get
- Return lineSelect.Width
- End Get
- Set(ByVal value As Integer)
- lineSelect.Width = value
- End Set
- End Property
- '显示的选项
- Private _ShowList As Object() = {}
- Public Property ShowList As Object()
- Get
- Return _ShowList
- End Get
- Set(ByVal value As Object())
- If _ShowList.Equals(value) Then Exit Property
- _ShowList = value
- Try
- panLabs.Children.Clear() '清空已有选项
- Dim i = 0
- For Each selection As String In value
- '每个选项
- Dim newLabel As New Label With {.Padding = New Thickness(0), .Name = "LabSelect" & GetUUID(), .Content = selection, .Height = 32, .HorizontalContentAlignment = HorizontalAlignment.Left, .VerticalContentAlignment = VerticalAlignment.Center, .Background = New MyColor(1, 200, 200, 200), .Opacity = 0.5, .FontSize = panBack.FontSize}
- newLabel.SetBinding(Control.ForegroundProperty, New Binding("Foreground") With {.ElementName = "panBack"})
- If HintList.Length > i Then newLabel.ToolTip = HintList(i)
- AddHandler newLabel.MouseEnter, AddressOf LabMouseEnter
- AddHandler newLabel.MouseLeave, AddressOf LabMouseLeave
- AddHandler newLabel.MouseUp, AddressOf LabMouseUp
- '添加Label
- panLabs.Children.Add(newLabel)
- i = i + 1
- Next
- NowSelect = panLabs.Children(0)
- SelectIndex = 0
- AniStop(Me.Name)
- NowSelect.Opacity = 1
- SetTop(lineSelect, 4)
- panLabs.IsHitTestVisible = True
- Catch ex As Exception
- ExShow(ex, "设置选择条选项失败", ErrorLevel.MsgboxAndFeedback)
- End Try
- End Set
- End Property
- '选择选项
- Public SelectIndexName As String = ""
- Private _SelectIndex As Byte = 0
- Public Property SelectIndex As Byte
- Get
- Return _SelectIndex
- End Get
- Set(ByVal value As Byte)
- Try
- value = MathRange(value, 0, panLabs.Children.Count - 1)
- Dim sender As Label = panLabs.Children(value)
- If sender.Content.Equals(SelectIndexName) Then Exit Property
- SelectIndexName = sender.Content
- If If(IsNothing(Me.Name), True, Me.Name = "selecter") Then Me.Name = "selecter" & GetUUID()
- '动画
- panLabs.IsHitTestVisible = False
- Dim AnimationList As New ArrayList
- For Each Lab As Label In panLabs.Children
- AniStart({AaOpacity(Lab, If(Lab.Equals(sender), 1, 0.5) - Lab.Opacity, 100)}, Lab.Name, False)
- Next
- AnimationList.Add(AaY(lineSelect, 4 + panLabs.Children.IndexOf(sender) * 32 - lineSelect.Margin.Top, , , New AniEaseJumpEnd(0.7)))
- AnimationList.Add(AaCode({"IsHitTestVisible", panLabs, True}, , True))
- AniStart(AnimationList, Me.Name)
- '切换选项
- NowSelect = sender
- '引发事件
- _SelectIndex = panLabs.Children.IndexOf(sender)
- RaiseEvent SelectionChange(NowSelect.Content)
- Catch ex As Exception
- ExShow(ex, "切换选择条选项失败", ErrorLevel.MsgboxAndFeedback)
- End Try
- End Set
- End Property
- '点击可以改变
- Public Property ClickToChange As Boolean = True
- '各个选项的指向提示
- Public Property HintList As String() = {}
- #End Region
- Private Sub LabMouseEnter(ByVal sender As Label, ByVal e As System.Windows.Input.MouseEventArgs)
- If Not NowSelect.Equals(sender) Then
- AniStart({AaOpacity(sender, 0.8 - sender.Opacity, 70)}, sender.Name)
- End If
- End Sub
- Private Sub LabMouseLeave(ByVal sender As Label, ByVal e As System.Windows.Input.MouseEventArgs)
- If Not NowSelect.Equals(sender) Then
- AniStart({AaOpacity(sender, 0.5 - sender.Opacity, 70)}, sender.Name)
- End If
- End Sub
- Private Sub LabMouseUp(ByVal sender As Label, ByVal e As System.Windows.Input.MouseButtonEventArgs)
- If ClickToChange And Not NowSelect.Equals(sender) Then SelectIndex = panLabs.Children.IndexOf(sender)
- RaiseEvent Click(sender.Content, panLabs.Children.IndexOf(sender))
- End Sub
- End Class
|