PageSetupLeft.xaml.vb 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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 Setup.Get("UiHiddenSetupLaunch") Then IsHiddenPage = True
  8. If ItemUI.Checked AndAlso Setup.Get("UiHiddenSetupUi") Then IsHiddenPage = True
  9. If ItemSystem.Checked AndAlso Setup.Get("UiHiddenSetupSystem") Then IsHiddenPage = True
  10. If ItemLink.Checked AndAlso Setup.Get("UiHiddenSetupLink") 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("UiHiddenSetupLaunch") Then
  20. ItemLaunch.SetChecked(True, False, False)
  21. ElseIf Not Setup.Get("UiHiddenSetupUi") Then
  22. ItemUI.SetChecked(True, False, False)
  23. ElseIf Not Setup.Get("UiHiddenSetupSystem") Then
  24. ItemSystem.SetChecked(True, False, False)
  25. ElseIf Not Setup.Get("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 Setup.Get("UiHiddenSetupLaunch") Then
  43. PageID = FormMain.PageSubType.SetupLaunch
  44. ElseIf Not Setup.Get("UiHiddenSetupUi") Then
  45. PageID = FormMain.PageSubType.SetupUI
  46. ElseIf Not Setup.Get("UiHiddenSetupSystem") Then
  47. PageID = FormMain.PageSubType.SetupSystem
  48. ElseIf Not Setup.Get("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 Exit Sub
  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. Log(ex, "切换设置分页面失败(ID " & ID & ")", LogLevel.Feedback)
  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(Sub()
  122. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  123. FrmMain.PanMainRight.Child = FrmMain.PageRight
  124. FrmMain.PageRight.Opacity = 0
  125. End Sub, 130),
  126. AaCode(Sub()
  127. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  128. FrmMain.PageRight.Opacity = 1
  129. FrmMain.PageRight.PageOnEnter()
  130. End Sub, 30, True)
  131. }, "PageLeft PageChange")
  132. End Sub
  133. #End Region
  134. Public Sub Reset(sender As Object, e As EventArgs)
  135. Select Case Val(sender.Tag)
  136. Case FormMain.PageSubType.SetupLaunch
  137. If MyMsgBox("是否要初始化启动页的所有设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  138. If IsNothing(FrmSetupLaunch) Then FrmSetupLaunch = New PageSetupLaunch
  139. FrmSetupLaunch.Reset()
  140. ItemLaunch.Checked = True
  141. End If
  142. Case FormMain.PageSubType.SetupUI
  143. If MyMsgBox("是否要初始化个性化页的所有设置?该操作不可撤销。" & vbCrLf & "(背景图片与音乐、自定义主页等外部文件不会被删除)", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  144. If IsNothing(FrmSetupUI) Then FrmSetupUI = New PageSetupUI
  145. FrmSetupUI.Reset()
  146. ItemUI.Checked = True
  147. End If
  148. Case FormMain.PageSubType.SetupSystem
  149. If MyMsgBox("是否要初始化启动器页的所有设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  150. If IsNothing(FrmSetupSystem) Then FrmSetupSystem = New PageSetupSystem
  151. FrmSetupSystem.Reset()
  152. ItemSystem.Checked = True
  153. End If
  154. Case FormMain.PageSubType.SetupLink
  155. If MyMsgBox("是否要初始化联机页的所有设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  156. If IsNothing(FrmSetupLink) Then FrmSetupLink = New PageSetupLink
  157. FrmSetupLink.Reset()
  158. ItemLink.Checked = True
  159. End If
  160. End Select
  161. End Sub
  162. End Class