PageOtherLeft.xaml.vb 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. Public Class PageOtherLeft
  2. Private IsLoad As Boolean = False
  3. Private IsPageSwitched As Boolean = False '如果在 Loaded 前切换到其他页面,会导致触发 Loaded 时再次切换一次
  4. Private Sub PageOtherLeft_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  5. '是否处于隐藏的子页面
  6. Dim IsHiddenPage As Boolean = False
  7. If ItemHelp.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then IsHiddenPage = True
  8. If ItemAbout.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then IsHiddenPage = True
  9. If ItemTest.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") Then IsHiddenPage = True
  10. If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
  11. '若页面错误,或尚未加载,则继续
  12. If IsLoad AndAlso Not IsHiddenPage Then Return
  13. IsLoad = True
  14. '刷新子页面隐藏情况
  15. PageSetupUI.HiddenRefresh()
  16. '选择第一个未被禁用的子页面
  17. If IsPageSwitched Then Return
  18. If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then
  19. ItemHelp.SetChecked(True, False, False)
  20. ElseIf Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then
  21. ItemAbout.SetChecked(True, False, False)
  22. Else
  23. ItemTest.SetChecked(True, False, False)
  24. End If
  25. End Sub
  26. Private Sub PageOtherLeft_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
  27. IsPageSwitched = False
  28. End Sub
  29. #Region "页面切换"
  30. ''' <summary>
  31. ''' 当前页面的编号。从 0 开始计算。
  32. ''' </summary>
  33. Public PageID As FormMain.PageSubType
  34. Public Sub New()
  35. InitializeComponent()
  36. '选择第一个未被禁用的子页面
  37. If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then
  38. PageID = FormMain.PageSubType.OtherHelp
  39. ElseIf Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then
  40. PageID = FormMain.PageSubType.OtherAbout
  41. Else
  42. PageID = FormMain.PageSubType.OtherTest
  43. End If
  44. End Sub
  45. ''' <summary>
  46. ''' 勾选事件改变页面。
  47. ''' </summary>
  48. Private Sub PageCheck(sender As FrameworkElement, e As RouteEventArgs) Handles ItemAbout.Check, ItemHelp.Check, ItemTest.Check
  49. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  50. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  51. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  52. End Sub
  53. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  54. If ID = -1 Then ID = PageID
  55. Select Case ID
  56. Case FormMain.PageSubType.OtherHelp
  57. If FrmOtherHelp Is Nothing Then FrmOtherHelp = New PageOtherHelp
  58. Return FrmOtherHelp
  59. Case FormMain.PageSubType.OtherAbout
  60. If FrmOtherAbout Is Nothing Then FrmOtherAbout = New PageOtherAbout
  61. Return FrmOtherAbout
  62. Case FormMain.PageSubType.OtherTest
  63. If FrmOtherTest Is Nothing Then FrmOtherTest = New PageOtherTest
  64. Return FrmOtherTest
  65. Case Else
  66. Throw New Exception("未知的更多子页面种类:" & ID)
  67. End Select
  68. End Function
  69. ''' <summary>
  70. ''' 切换现有页面。
  71. ''' </summary>
  72. Public Sub PageChange(ID As FormMain.PageSubType)
  73. If PageID = ID Then Return
  74. AniControlEnabled += 1
  75. IsPageSwitched = True
  76. Try
  77. PageChangeRun(PageGet(ID))
  78. PageID = ID
  79. Catch ex As Exception
  80. Logger.Error(ex, $"切换分页面失败(ID {ID})")
  81. Finally
  82. AniControlEnabled -= 1
  83. End Try
  84. End Sub
  85. Private Shared Sub PageChangeRun(Target As MyPageRight)
  86. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  87. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  88. FrmMain.PageRight = Target
  89. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  90. AniStart({
  91. AaCode(Sub()
  92. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  93. FrmMain.PanMainRight.Child = FrmMain.PageRight
  94. FrmMain.PageRight.Opacity = 0
  95. End Sub, 130),
  96. AaCode(Sub()
  97. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  98. FrmMain.PageRight.Opacity = 1
  99. FrmMain.PageRight.PageOnEnter()
  100. End Sub, 30, True)
  101. }, "PageLeft PageChange")
  102. End Sub
  103. #End Region
  104. '强制刷新
  105. Public Sub Refresh(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  106. Select Case Val(sender.Tag)
  107. Case FormMain.PageSubType.OtherHelp
  108. RefreshHelp()
  109. ItemHelp.Checked = True
  110. End Select
  111. Hint("正在刷新……", Log:=False)
  112. End Sub
  113. Public Shared Sub RefreshHelp()
  114. Settings.Set("SystemHelpVersion", 0) '强制重新解压文件
  115. FrmOtherHelp.PageLoaderRestart()
  116. FrmOtherHelp.SearchBox.Text = ""
  117. End Sub
  118. '打开网页
  119. Private Sub TryFeedback(sender As Object, e As RouteEventArgs) Handles ItemFeedback.Changed
  120. If Not ItemFeedback.Checked Then Return
  121. TryFeedback()
  122. e.Handled = True
  123. End Sub
  124. Public Shared Sub TryFeedback()
  125. If False.Equals(PageSetupSystem.IsLauncherNewest) Then
  126. If MyMsgBox($"你的 PCL 不是最新版,因此无法提交反馈。{vbCrLf}请在更新后,确认该问题在最新版中依然存在,然后再提交反馈。", "无法提交反馈", "更新", "取消") = 1 Then
  127. UpdateCheckByButton()
  128. End If
  129. Return
  130. End If
  131. Select Case MyMsgBox("在提交新反馈前,建议先搜索反馈列表,以避免重复提交。" & vbCrLf & "如果无法打开该网页,请使用 VPN 改善网络环境。",
  132. "反馈", "提交新反馈", "查看反馈列表", "取消")
  133. Case 1
  134. Feedback(True, False)
  135. Case 2
  136. OpenWebsite("https://github.com/Meloong-Git/PCL/issues/")
  137. End Select
  138. End Sub
  139. Private Sub TryVote(sender As Object, e As RouteEventArgs) Handles ItemVote.Changed
  140. If Not ItemVote.Checked Then Return
  141. TryVote()
  142. e.Handled = True
  143. End Sub
  144. Public Shared Sub TryVote()
  145. If MyMsgBox("是否要打开新功能投票网页?" & vbCrLf & "如果无法打开该网页,请使用 VPN 改善网络环境。",
  146. "新功能投票", "打开", "取消") = 2 Then Return
  147. OpenWebsite("https://github.com/Meloong-Git/PCL/discussions/categories/%E5%8A%9F%E8%83%BD%E6%8A%95%E7%A5%A8?discussions_q=category%3A%E5%8A%9F%E8%83%BD%E6%8A%95%E7%A5%A8+sort%3Adate_created")
  148. End Sub
  149. End Class