PageOtherLeft.xaml.vb 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 Setup.Get("UiHiddenOtherHelp") Then IsHiddenPage = True
  8. If ItemAbout.Checked AndAlso Setup.Get("UiHiddenOtherAbout") Then IsHiddenPage = True
  9. If ItemTest.Checked AndAlso Setup.Get("UiHiddenOtherTest") Then IsHiddenPage = True
  10. If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
  11. '若页面错误,或尚未加载,则继续
  12. If IsLoad AndAlso Not IsHiddenPage Then Exit Sub
  13. IsLoad = True
  14. '刷新子页面隐藏情况
  15. PageSetupUI.HiddenRefresh()
  16. '选择第一个未被禁用的子页面
  17. If IsPageSwitched Then Exit Sub
  18. If Not Setup.Get("UiHiddenOtherHelp") Then
  19. ItemHelp.SetChecked(True, False, False)
  20. ElseIf Not Setup.Get("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 Setup.Get("UiHiddenOtherHelp") Then
  38. PageID = FormMain.PageSubType.OtherHelp
  39. ElseIf Not Setup.Get("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 MyListItem, 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 Exit Sub
  74. AniControlEnabled += 1
  75. IsPageSwitched = True
  76. Try
  77. PageChangeRun(PageGet(ID))
  78. PageID = ID
  79. Catch ex As Exception
  80. Log(ex, "切换设置分页面失败(ID " & ID & ")", LogLevel.Feedback)
  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. Setup.Set("SystemHelpVersion", 0) '强制重新解压文件
  115. FrmOtherHelp.PageLoaderRestart()
  116. FrmOtherHelp.SearchBox.Text = ""
  117. End Sub
  118. '打开网页
  119. Public Shared Sub TryFeedback() Handles ItemFeedback.Click
  120. If Not CanFeedback(True) Then Exit Sub
  121. Select Case MyMsgBox("是否要打开反馈列表网页?" & vbCrLf & "如果无法打开该网页,请尝试使用加速器或 VPN。",
  122. "反馈提示", "提交新反馈", "查看反馈列表", "取消")
  123. Case 1
  124. Feedback(True, False)
  125. Case 2
  126. OpenWebsite("https://github.com/Hex-Dragon/PCL2/issues/")
  127. End Select
  128. End Sub
  129. Public Shared Sub TryVote() Handles ItemVote.Click
  130. If MyMsgBox("是否要打开新功能投票网页?" & vbCrLf & "如果无法打开该网页,请尝试使用加速器或 VPN。",
  131. "提醒", "打开", "取消") = 2 Then Exit Sub
  132. OpenWebsite("https://github.com/Hex-Dragon/PCL2/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")
  133. End Sub
  134. End Class