PageOtherLeft.xaml.vb 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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 ItemFeedback.Checked AndAlso Setup.Get("UiHiddenOtherFeedback") Then IsHiddenPage = True
  9. If ItemAbout.Checked AndAlso Setup.Get("UiHiddenOtherAbout") Then IsHiddenPage = True
  10. If ItemTest.Checked AndAlso Setup.Get("UiHiddenOtherTest") Then IsHiddenPage = True
  11. If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
  12. '若页面错误,或尚未加载,则继续
  13. If IsLoad AndAlso Not IsHiddenPage Then Exit Sub
  14. IsLoad = True
  15. '刷新子页面隐藏情况
  16. PageSetupUI.HiddenRefresh()
  17. '选择第一个未被禁用的子页面
  18. If IsPageSwitched Then Exit Sub
  19. If Not Setup.Get("UiHiddenOtherHelp") Then
  20. ItemHelp.SetChecked(True, False, False)
  21. ElseIf Not Setup.Get("UiHiddenOtherAbout") Then
  22. ItemAbout.SetChecked(True, False, False)
  23. ElseIf Not Setup.Get("UiHiddenOtherTest") Then
  24. ItemTest.SetChecked(True, False, False)
  25. Else
  26. ItemFeedback.SetChecked(True, False, False)
  27. End If
  28. End Sub
  29. Private Sub PageOtherLeft_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
  30. IsPageSwitched = False
  31. End Sub
  32. #Region "页面切换"
  33. ''' <summary>
  34. ''' 当前页面的编号。从 0 开始计算。
  35. ''' </summary>
  36. Public PageID As FormMain.PageSubType
  37. Public Sub New()
  38. InitializeComponent()
  39. '选择第一个未被禁用的子页面
  40. If Not Setup.Get("UiHiddenOtherHelp") Then
  41. PageID = FormMain.PageSubType.OtherHelp
  42. ElseIf Not Setup.Get("UiHiddenOtherAbout") Then
  43. PageID = FormMain.PageSubType.OtherAbout
  44. ElseIf Not Setup.Get("UiHiddenOtherTest") Then
  45. PageID = FormMain.PageSubType.OtherTest
  46. Else
  47. PageID = FormMain.PageSubType.OtherFeedback
  48. End If
  49. End Sub
  50. ''' <summary>
  51. ''' 勾选事件改变页面。
  52. ''' </summary>
  53. Private Sub PageCheck(sender As MyListItem, e As RouteEventArgs) Handles ItemAbout.Check, ItemHelp.Check, ItemFeedback.Check, ItemTest.Check
  54. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  55. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  56. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  57. End Sub
  58. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  59. If ID = -1 Then ID = PageID
  60. Select Case ID
  61. Case FormMain.PageSubType.OtherHelp
  62. If FrmOtherHelp Is Nothing Then FrmOtherHelp = New PageOtherHelp
  63. Return FrmOtherHelp
  64. Case FormMain.PageSubType.OtherFeedback
  65. If FrmOtherFeedback Is Nothing Then FrmOtherFeedback = New PageOtherFeedback
  66. Return FrmOtherFeedback
  67. Case FormMain.PageSubType.OtherAbout
  68. If FrmOtherAbout Is Nothing Then FrmOtherAbout = New PageOtherAbout
  69. Return FrmOtherAbout
  70. Case FormMain.PageSubType.OtherTest
  71. If FrmOtherTest Is Nothing Then FrmOtherTest = New PageOtherTest
  72. Return FrmOtherTest
  73. Case Else
  74. Throw New Exception("未知的更多子页面种类:" & ID)
  75. End Select
  76. End Function
  77. ''' <summary>
  78. ''' 切换现有页面。
  79. ''' </summary>
  80. Public Sub PageChange(ID As FormMain.PageSubType)
  81. If PageID = ID Then Exit Sub
  82. AniControlEnabled += 1
  83. IsPageSwitched = True
  84. Try
  85. PageChangeRun(PageGet(ID))
  86. PageID = ID
  87. Catch ex As Exception
  88. Log(ex, "切换设置分页面失败(ID " & ID & ")", LogLevel.Feedback)
  89. Finally
  90. AniControlEnabled -= 1
  91. End Try
  92. End Sub
  93. Private Shared Sub PageChangeRun(Target As MyPageRight)
  94. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  95. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  96. FrmMain.PageRight = Target
  97. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  98. AniStart({
  99. AaCode(Sub()
  100. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  101. FrmMain.PanMainRight.Child = FrmMain.PageRight
  102. FrmMain.PageRight.Opacity = 0
  103. End Sub, 130),
  104. AaCode(Sub()
  105. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  106. FrmMain.PageRight.Opacity = 1
  107. FrmMain.PageRight.PageOnEnter()
  108. End Sub, 30, True)
  109. }, "PageLeft PageChange")
  110. End Sub
  111. #End Region
  112. '强制刷新
  113. Public Sub Refresh(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  114. Select Case Val(sender.Tag)
  115. Case FormMain.PageSubType.OtherHelp
  116. RefreshHelp()
  117. Case FormMain.PageSubType.OtherFeedback
  118. If FrmOtherFeedback IsNot Nothing Then
  119. FrmOtherFeedback.PageLoaderRestart()
  120. FrmOtherFeedback.SearchBox.Text = ""
  121. Else
  122. FeedbackLoader.Start()
  123. End If
  124. End Select
  125. End Sub
  126. Public Shared Sub RefreshHelp()
  127. Setup.Set("SystemHelpVersion", 0) '强制重新解压文件
  128. FrmOtherHelp.PageLoaderRestart()
  129. FrmOtherHelp.SearchBox.Text = ""
  130. End Sub
  131. End Class