| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- Public Class PageOtherHelp
- #Region "初始化"
- '滚动条
- Private Sub PageOther_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
- PanBack.ScrollToHome()
- End Sub
- '初始化加载器信息
- Private Sub PageOther_Inited(sender As Object, e As EventArgs) Handles Me.Initialized
- PageLoaderInit(Load, PanLoad, PanBack, Nothing, HelpLoader, AddressOf HelpListLoad)
- End Sub
- #End Region
- ''' <summary>
- ''' 将帮助列表对象实例化为主页 UI。
- ''' </summary>
- Private Sub HelpListLoad(Loader As LoaderTask(Of Integer, List(Of HelpEntry)))
- Try
- '初始化
- PanList.Children.Clear()
- PanBack.ScrollToHome()
- Dim HelpItems = Loader.Output
- '获取全部分类
- Dim Types As New List(Of String)
- For Each Item As HelpEntry In HelpItems
- If Val(VersionBranchCode) = 50 AndAlso Not Item.ShowInPublic Then Continue For
- If Val(VersionBranchCode) <> 50 AndAlso Not Item.ShowInSnapshot Then Continue For
- For Each Type In Item.Types
- If Not Types.Contains(Type) Then Types.Add(Type)
- Next
- Next
- '将指南页面置顶
- If Types.Contains("指南") Then
- Types.Remove("指南")
- Types.Insert(0, "指南")
- End If
- '转化为 UI
- For Each Type As String In Types
- '确认所属该分类的项目
- Dim TypeItems As New List(Of HelpEntry)
- For Each Item In HelpItems
- If Val(VersionBranchCode) = 50 AndAlso Not Item.ShowInPublic Then Continue For
- If Val(VersionBranchCode) <> 50 AndAlso Not Item.ShowInSnapshot Then Continue For
- If Item.Types.Contains(Type) Then TypeItems.Add(Item)
- Next
- '增加卡片
- Dim NewCard As New MyCard With {.Title = Type, .Margin = New Thickness(0, 0, 0, 15), .SwapType = 11}
- Dim NewStack As New StackPanel With {.Margin = New Thickness(20, MyCard.SwapedHeight, 18, 0), .VerticalAlignment = VerticalAlignment.Top, .RenderTransform = New TranslateTransform(0, 0), .Tag = TypeItems}
- NewCard.Children.Add(NewStack)
- NewCard.SwapControl = NewStack
- If Type = "指南" Then
- MyCard.StackInstall(NewStack, 11, "指南")
- Else
- NewCard.IsSwaped = True
- End If
- PanList.Children.Add(NewCard)
- Next
- Catch ex As Exception
- Log(ex, "加载帮助列表 UI 失败", LogLevel.Feedback)
- End Try
- End Sub
- ''' <summary>
- ''' 帮助项目的点击事件。
- ''' </summary>
- Public Shared Sub OnItemClick(Entry As HelpEntry)
- Try
- If Entry.IsEvent Then
- ModEvent.TryStartEvent(Entry.EventType, Entry.EventData)
- Else
- EnterHelpPage(Entry)
- End If
- Catch ex As Exception
- Log(ex, "处理帮助项目点击时发生意外错误", LogLevel.Feedback)
- End Try
- End Sub
- Public Shared Sub EnterHelpPage(Location As String)
- RunInThread(Sub()
- If Not HelpLoader.State = LoadState.Finished Then HelpLoader.WaitForExit(GetUuid)
- Dim Entry As New HelpEntry(Location)
- RunInUi(Sub()
- Dim FrmHelpDetail As New PageOtherHelpDetail
- If FrmHelpDetail.Init(Entry) Then
- FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.HelpDetail, .Additional = {Entry, FrmHelpDetail}})
- Else
- Log("[Help] 已取消进入帮助项目,这一般是由于 xaml 初始化失败,且用户在弹窗中手动放弃", LogLevel.Debug)
- End If
- End Sub)
- End Sub)
- End Sub
- Public Shared Sub EnterHelpPage(Entry As HelpEntry)
- RunInThread(Sub()
- If Not HelpLoader.State = LoadState.Finished Then HelpLoader.WaitForExit(GetUuid)
- RunInUi(Sub()
- Dim FrmHelpDetail As New PageOtherHelpDetail
- If FrmHelpDetail.Init(Entry) Then
- FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.HelpDetail, .Additional = {Entry, FrmHelpDetail}})
- Else
- Log("[Help] 已取消进入帮助项目,这一般是由于 xaml 初始化失败,且用户在弹窗中手动放弃", LogLevel.Debug)
- End If
- End Sub)
- End Sub)
- End Sub
- Public Shared Function GetHelpPage(Location As String) As PageOtherHelpDetail
- If Not HelpLoader.State = LoadState.Finished Then HelpLoader.WaitForExit(GetUuid)
- Dim FrmHelpDetail As New PageOtherHelpDetail
- If FrmHelpDetail.Init(New HelpEntry(Location)) Then
- Return FrmHelpDetail
- Else
- Throw New Exception("已取消进入帮助项目,这一般是由于 xaml 初始化失败,且用户在弹窗中手动放弃")
- End If
- End Function
- ''' <summary>
- ''' 搜索帮助。
- ''' </summary>
- Public Sub SearchRun() Handles SearchBox.TextChanged
- If String.IsNullOrWhiteSpace(SearchBox.Text) Then
- '隐藏
- AniStart({
- AaOpacity(PanSearch, -PanSearch.Opacity, 100),
- AaCode(Sub()
- PanSearch.Height = 0
- PanSearch.Visibility = Visibility.Collapsed
- PanList.Visibility = Visibility.Visible
- End Sub,, True),
- AaOpacity(PanList, 1 - PanList.Opacity, 150, 30)
- }, "FrmOtherHelp Search Switch")
- Else
- '构造请求
- Dim QueryList As New List(Of SearchEntry(Of HelpEntry))
- For Each Entry As HelpEntry In HelpLoader.Output
- If Not Entry.ShowInSearch OrElse (Val(VersionBranchCode) = 50 AndAlso Not Entry.ShowInPublic) Then Continue For
- If Not Entry.ShowInSearch OrElse (Val(VersionBranchCode) <> 50 AndAlso Not Entry.ShowInSnapshot) Then Continue For
- QueryList.Add(New SearchEntry(Of HelpEntry) With {
- .Item = Entry,
- .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
- New KeyValuePair(Of String, Double)(Entry.Title, 1),
- New KeyValuePair(Of String, Double)(Entry.Desc, 0.5),
- New KeyValuePair(Of String, Double)(Entry.Search, 1.5)
- }
- })
- 'New KeyValuePair(Of String, Double)(If(Entry.IsEvent, If(Entry.EventData, ""), Entry.XamlContent), 0.2)
- Next
- '进行搜索,构造列表
- Dim SearchResult = Search(QueryList, SearchBox.Text, MaxBlurCount:=5, MinBlurSimilarity:=0.08)
- PanSearchList.Children.Clear()
- If SearchResult.Count = 0 Then
- PanSearch.Title = "无搜索结果"
- PanSearchList.Visibility = Visibility.Collapsed
- Else
- PanSearch.Title = "搜索结果"
- For Each Result In SearchResult
- Dim Item = Result.Item.ToListItem
- If ModeDebug Then Item.Info = If(Result.AbsoluteRight, "完全匹配,", "") & "相似度:" & Math.Round(Result.Similarity, 3) & "," & Item.Info
- PanSearchList.Children.Add(Item)
- Next
- PanSearchList.Visibility = Visibility.Visible
- End If
- '显示
- AniStart({
- AaOpacity(PanList, -PanList.Opacity, 100),
- AaCode(Sub()
- PanList.Visibility = Visibility.Collapsed
- PanSearch.Visibility = Visibility.Visible
- PanSearch.TriggerForceResize()
- End Sub,, True),
- AaOpacity(PanSearch, 1 - PanSearch.Opacity, 150, 30)
- }, "FrmOtherHelp Search Switch")
- End If
- End Sub
- End Class
|