PageSetupLeft.xaml.vb 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. Public Class PageSetupLeft
  2. Private IsLoad As Boolean = False
  3. Private IsPageSwitched As Boolean = False '如果在 Loaded 前切换到其他页面,会导致触发 Loaded 时再次切换一次
  4. Private Sub PageSetupLeft_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  5. '是否处于隐藏的子页面
  6. Dim IsHiddenPage As Boolean = False
  7. If ItemLaunch.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then IsHiddenPage = True
  8. If ItemUI.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") Then IsHiddenPage = True
  9. If ItemSystem.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then IsHiddenPage = True
  10. If ItemLink.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then IsHiddenPage = True
  11. If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
  12. '若页面错误,或尚未加载,则继续
  13. If IsLoad AndAlso Not IsHiddenPage Then Return
  14. IsLoad = True
  15. '刷新子页面隐藏情况
  16. PageSetupUI.HiddenRefresh()
  17. '选择第一个未被禁用的子页面
  18. If IsPageSwitched Then Return
  19. If Not Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then
  20. ItemLaunch.SetChecked(True, False, False)
  21. ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupUi") Then
  22. ItemUI.SetChecked(True, False, False)
  23. ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then
  24. ItemSystem.SetChecked(True, False, False)
  25. ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
  26. ItemLink.SetChecked(True, False, False)
  27. Else
  28. ItemLaunch.SetChecked(True, False, False)
  29. End If
  30. End Sub
  31. Private Sub PageOtherLeft_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
  32. IsPageSwitched = False
  33. End Sub
  34. #Region "页面切换"
  35. ''' <summary>
  36. ''' 当前页面的编号。从左往右从 0 开始计算。
  37. ''' </summary>
  38. Public PageID As FormMain.PageSubType
  39. Public Sub New()
  40. InitializeComponent()
  41. '选择第一个未被禁用的子页面
  42. If Not Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then
  43. PageID = FormMain.PageSubType.SetupLaunch
  44. ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupUi") Then
  45. PageID = FormMain.PageSubType.SetupUI
  46. ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then
  47. PageID = FormMain.PageSubType.SetupSystem
  48. ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
  49. PageID = FormMain.PageSubType.SetupLink
  50. Else
  51. PageID = FormMain.PageSubType.SetupLaunch
  52. End If
  53. End Sub
  54. ''' <summary>
  55. ''' 勾选事件改变页面。
  56. ''' </summary>
  57. Private Sub PageCheck(sender As MyListItem, e As EventArgs) Handles ItemLaunch.Check, ItemSystem.Check, ItemUI.Check, ItemLink.Check
  58. '尚未初始化控件属性时,sender.Tag 为 Nothing,会跳过切换,且由于 PageID 默认为 0 而切换到第一个页面
  59. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  60. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  61. End Sub
  62. ''' <summary>
  63. ''' 获取当前导航指定的右页面。
  64. ''' </summary>
  65. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  66. If ID = -1 Then ID = PageID
  67. Select Case ID
  68. Case FormMain.PageSubType.SetupLaunch
  69. If FrmSetupLaunch Is Nothing Then FrmSetupLaunch = New PageSetupLaunch
  70. Return FrmSetupLaunch
  71. Case FormMain.PageSubType.SetupUI
  72. If FrmSetupUI Is Nothing Then FrmSetupUI = New PageSetupUI
  73. Return FrmSetupUI
  74. Case FormMain.PageSubType.SetupLink
  75. If FrmSetupLink Is Nothing Then FrmSetupLink = New PageSetupLink
  76. Return FrmSetupLink
  77. Case FormMain.PageSubType.SetupSystem
  78. If FrmSetupSystem Is Nothing Then FrmSetupSystem = New PageSetupSystem
  79. Return FrmSetupSystem
  80. Case Else
  81. Throw New Exception("未知的设置子页面种类:" & ID)
  82. End Select
  83. End Function
  84. ''' <summary>
  85. ''' 切换现有页面。
  86. ''' </summary>
  87. Public Sub PageChange(ID As FormMain.PageSubType)
  88. If PageID = ID Then Return
  89. AniControlEnabled += 1
  90. IsPageSwitched = True
  91. Try
  92. Select Case ID
  93. Case FormMain.PageSubType.SetupLaunch
  94. If IsNothing(FrmSetupLaunch) Then FrmSetupLaunch = New PageSetupLaunch
  95. PageChangeRun(FrmSetupLaunch)
  96. Case FormMain.PageSubType.SetupUI
  97. If IsNothing(FrmSetupUI) Then FrmSetupUI = New PageSetupUI
  98. PageChangeRun(FrmSetupUI)
  99. Case FormMain.PageSubType.SetupLink
  100. If IsNothing(FrmSetupLink) Then FrmSetupLink = New PageSetupLink
  101. PageChangeRun(FrmSetupLink)
  102. Case FormMain.PageSubType.SetupSystem
  103. If IsNothing(FrmSetupSystem) Then FrmSetupSystem = New PageSetupSystem
  104. PageChangeRun(FrmSetupSystem)
  105. Case Else
  106. Throw New Exception("未知的设置子页面种类:" & ID)
  107. End Select
  108. PageID = ID
  109. Catch ex As Exception
  110. Logger.Error(ex, $"切换分页面失败(ID {ID})")
  111. Finally
  112. AniControlEnabled -= 1
  113. End Try
  114. End Sub
  115. Private Shared Sub PageChangeRun(Target As MyPageRight)
  116. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  117. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  118. FrmMain.PageRight = Target
  119. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  120. AniStart({
  121. AaCode(
  122. Sub()
  123. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  124. FrmMain.PanMainRight.Child = FrmMain.PageRight
  125. FrmMain.PageRight.Opacity = 0
  126. End Sub, 130),
  127. AaCode(
  128. Sub()
  129. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  130. FrmMain.PageRight.Opacity = 1
  131. FrmMain.PageRight.PageOnEnter()
  132. End Sub, 30, True)
  133. }, "PageLeft PageChange")
  134. End Sub
  135. #End Region
  136. Public Sub Reset(sender As Object, e As EventArgs)
  137. Select Case Val(sender.Tag)
  138. Case FormMain.PageSubType.SetupLaunch
  139. If MyMsgBox("是否要初始化 启动 页面的所有设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  140. If IsNothing(FrmSetupLaunch) Then FrmSetupLaunch = New PageSetupLaunch
  141. FrmSetupLaunch.Reset()
  142. ItemLaunch.Checked = True
  143. End If
  144. Case FormMain.PageSubType.SetupUI
  145. If MyMsgBox("是否要初始化 个性化 页面的所有设置?该操作不可撤销。" & vbCrLf & "(背景图片与音乐、主页等外部文件不会被删除)", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  146. If IsNothing(FrmSetupUI) Then FrmSetupUI = New PageSetupUI
  147. FrmSetupUI.Reset()
  148. ItemUI.Checked = True
  149. End If
  150. Case FormMain.PageSubType.SetupSystem
  151. If MyMsgBox("是否要初始化 其他 页面的所有设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  152. If IsNothing(FrmSetupSystem) Then FrmSetupSystem = New PageSetupSystem
  153. FrmSetupSystem.Reset()
  154. ItemSystem.Checked = True
  155. End If
  156. Case FormMain.PageSubType.SetupLink
  157. If MyMsgBox("是否要初始化 联机 页面的所有设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  158. If IsNothing(FrmSetupLink) Then FrmSetupLink = New PageSetupLink
  159. FrmSetupLink.Reset()
  160. ItemLink.Checked = True
  161. End If
  162. End Select
  163. End Sub
  164. End Class