PageVersionLeft.xaml.vb 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. Public Class PageVersionLeft
  2. Implements IRefreshable
  3. ''' <summary>
  4. ''' 当前显示设置的 MC 版本。
  5. ''' </summary>
  6. Public Shared Version As McVersion = Nothing
  7. Public Sub RefreshModDisabled() Handles Me.Loaded
  8. If Version IsNot Nothing AndAlso Version.Modable Then
  9. ItemMod.Visibility = Visibility.Visible
  10. ItemModDisabled.Visibility = Visibility.Collapsed
  11. Else
  12. ItemMod.Visibility = Visibility.Collapsed
  13. ItemModDisabled.Visibility = Visibility.Visible
  14. End If
  15. End Sub
  16. #Region "页面切换"
  17. ''' <summary>
  18. ''' 当前页面的编号。从 0 开始计算。
  19. ''' </summary>
  20. Public PageID As FormMain.PageSubType = FormMain.PageSubType.Default
  21. ''' <summary>
  22. ''' 勾选事件改变页面。
  23. ''' </summary>
  24. Private Sub PageCheck(sender As MyListItem, e As RouteEventArgs) Handles ItemOverall.Check, ItemMod.Check, ItemModDisabled.Check, ItemSetup.Check, ItemExport.Check
  25. '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
  26. '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
  27. If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
  28. End Sub
  29. Public Function PageGet(Optional ID As FormMain.PageSubType = -1)
  30. If ID = -1 Then ID = PageID
  31. Select Case ID
  32. Case FormMain.PageSubType.VersionOverall
  33. If FrmVersionOverall Is Nothing Then FrmVersionOverall = New PageVersionOverall
  34. Return FrmVersionOverall
  35. Case FormMain.PageSubType.VersionMod
  36. If FrmVersionMod Is Nothing Then FrmVersionMod = New PageVersionMod
  37. Return FrmVersionMod
  38. Case FormMain.PageSubType.VersionModDisabled
  39. If FrmVersionModDisabled Is Nothing Then FrmVersionModDisabled = New PageVersionModDisabled
  40. Return FrmVersionModDisabled
  41. Case FormMain.PageSubType.VersionSetup
  42. If IsNothing(FrmVersionSetup) Then FrmVersionSetup = New PageVersionSetup
  43. Return FrmVersionSetup
  44. Case FormMain.PageSubType.VersionExport
  45. If FrmVersionExport Is Nothing Then FrmVersionExport = New PageVersionExport
  46. Return FrmVersionExport
  47. Case Else
  48. Throw New Exception("未知的版本设置子页面种类:" & ID)
  49. End Select
  50. End Function
  51. ''' <summary>
  52. ''' 切换现有页面。
  53. ''' </summary>
  54. Public Sub PageChange(ID As FormMain.PageSubType)
  55. If PageID = ID Then Return
  56. AniControlEnabled += 1
  57. Try
  58. PageChangeRun(PageGet(ID))
  59. PageID = ID
  60. Catch ex As Exception
  61. Log(ex, "切换分页面失败(ID " & ID & ")", LogLevel.Feedback)
  62. Finally
  63. AniControlEnabled -= 1
  64. End Try
  65. End Sub
  66. Private Shared Sub PageChangeRun(Target As MyPageRight)
  67. AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
  68. If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing)
  69. FrmMain.PageRight = Target
  70. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit()
  71. AniStart({
  72. AaCode(Sub()
  73. CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit()
  74. FrmMain.PanMainRight.Child = FrmMain.PageRight
  75. FrmMain.PageRight.Opacity = 0
  76. End Sub, 130),
  77. AaCode(Sub()
  78. '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
  79. FrmMain.PageRight.Opacity = 1
  80. FrmMain.PageRight.PageOnEnter()
  81. End Sub, 30, True)
  82. }, "PageLeft PageChange")
  83. End Sub
  84. #End Region
  85. Public Sub Refresh(sender As Object, e As EventArgs) '由边栏按钮匿名调用
  86. Refresh(Val(sender.Tag))
  87. End Sub
  88. Public Sub Refresh() Implements IRefreshable.Refresh
  89. Refresh(FrmMain.PageCurrentSub)
  90. End Sub
  91. Public Sub Refresh(SubType As FormMain.PageSubType)
  92. Select Case SubType
  93. Case FormMain.PageSubType.VersionMod
  94. PageVersionMod.Refresh()
  95. ItemMod.Checked = True
  96. Case FormMain.PageSubType.VersionExport
  97. If FrmVersionExport IsNot Nothing Then FrmVersionExport.RefreshAll()
  98. ItemExport.Checked = True
  99. End Select
  100. End Sub
  101. Public Sub Reset(sender As Object, e As EventArgs)
  102. If MyMsgBox("是否要初始化该版本的版本独立设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then
  103. If IsNothing(FrmVersionSetup) Then FrmVersionSetup = New PageVersionSetup
  104. FrmVersionSetup.Reset()
  105. ItemSetup.Checked = True
  106. End If
  107. End Sub
  108. End Class