PageLinkLeft.xaml.vb 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. Public Class PageLinkLeft
  2. Private IsLoad As Boolean = False
  3. Private IsPageSwitched As Boolean = False '如果在 Loaded 前切换到其他页面,会导致触发 Loaded 时再次切换一次
  4. Private Sub PageLinkLeft_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  5. If IsLoad Then Exit Sub
  6. IsLoad = True
  7. '切换默认页面
  8. If IsPageSwitched Then Exit Sub
  9. ItemHiper.SetChecked(True, False, False)
  10. End Sub
  11. Private Sub PageOtherLeft_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
  12. IsPageSwitched = False
  13. End Sub
  14. #Region "页面切换"
  15. ''' <summary>
  16. ''' 当前页面的编号。
  17. ''' </summary>
  18. Public PageID As FormMain.PageSubType = FormMain.PageSubType.LinkHiper
  19. ''' <summary>
  20. ''' 勾选事件改变页面。
  21. ''' </summary>
  22. Private Sub PageCheck(sender As MyListItem, e As RouteEventArgs) Handles ItemHiper.Check, ItemIoi.Check, ItemSetup.Check, ItemHelp.Check, ItemFeedback.Check
  23. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  24. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  25. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  26. End Sub
  27. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  28. If ID = -1 Then ID = PageID
  29. Select Case ID
  30. Case 0, FormMain.PageSubType.LinkHiper
  31. If FrmLinkHiper Is Nothing Then FrmLinkHiper = New PageLinkHiper
  32. Return FrmLinkHiper
  33. Case FormMain.PageSubType.LinkIoi
  34. If FrmLinkIoi Is Nothing Then FrmLinkIoi = New PageLinkIoi
  35. Return FrmLinkIoi
  36. Case FormMain.PageSubType.LinkSetup
  37. If FrmSetupLink Is Nothing Then FrmSetupLink = New PageSetupLink
  38. Return FrmSetupLink
  39. Case FormMain.PageSubType.LinkHelp
  40. If FrmLinkHelp Is Nothing Then FrmLinkHelp = PageOtherHelp.GetHelpPage(PathTemp & "Help\启动器\联机.json")
  41. Return FrmLinkHelp
  42. Case FormMain.PageSubType.LinkFeedback
  43. If FrmLinkFeedback Is Nothing Then FrmLinkFeedback = New PageLinkFeedback
  44. Return FrmLinkFeedback
  45. Case Else
  46. Throw New Exception("未知的更多子页面种类:" & ID)
  47. End Select
  48. End Function
  49. ''' <summary>
  50. ''' 切换现有页面。
  51. ''' </summary>
  52. Public Sub PageChange(ID As FormMain.PageSubType)
  53. If PageID = ID Then Exit Sub
  54. AniControlEnabled += 1
  55. IsPageSwitched = True
  56. Try
  57. PageChangeRun(PageGet(ID))
  58. PageID = ID
  59. Catch ex As Exception
  60. Log(ex, "切换设置分页面失败(ID " & ID & ")", LogLevel.Feedback)
  61. Finally
  62. AniControlEnabled -= 1
  63. End Try
  64. End Sub
  65. Private Shared Sub PageChangeRun(Target As MyPageRight)
  66. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  67. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  68. FrmMain.PageRight = Target
  69. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  70. AniStart({
  71. AaCode(Sub()
  72. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  73. FrmMain.PanMainRight.Child = FrmMain.PageRight
  74. FrmMain.PageRight.Opacity = 0
  75. End Sub, 130),
  76. AaCode(Sub()
  77. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  78. FrmMain.PageRight.Opacity = 1
  79. FrmMain.PageRight.PageOnEnter()
  80. End Sub, 30, True)
  81. }, "PageLeft PageChange")
  82. End Sub
  83. #End Region
  84. Public Sub Reset(sender As Object, e As EventArgs)
  85. If MyMsgBox("是否要初始化联机页的所有设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  86. If IsNothing(FrmSetupLink) Then FrmSetupLink = New PageSetupLink
  87. FrmSetupLink.Reset()
  88. ItemSetup.Checked = True
  89. End If
  90. End Sub
  91. Private Sub BtnHiperStop_Loaded(sender As Object, e As RoutedEventArgs)
  92. sender.Visibility = If(PageLinkHiper.HiperState = LoadState.Finished OrElse PageLinkHiper.HiperState = LoadState.Loading, Visibility.Visible, Visibility.Collapsed)
  93. End Sub
  94. Private Sub BtnHiperStop_Click(sender As Object, e As EventArgs)
  95. PageLinkHiper.ModuleStopManually()
  96. End Sub
  97. Private Sub BtnIoiStop_Loaded(sender As Object, e As RoutedEventArgs)
  98. End Sub
  99. Private Sub BtnIoiStop_Click(sender As Object, e As EventArgs)
  100. PageLinkIoi.ModuleStopManually()
  101. End Sub
  102. End Class