PageInstanceLeft.xaml.vb 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. Public Class PageInstanceLeft
  2. Implements IRefreshable
  3. ''' <summary>
  4. ''' 当前显示设置的 MC 版本。
  5. ''' </summary>
  6. Public Shared Instance As McInstance = Nothing
  7. Public Sub RefreshModDisabled() Handles Me.Loaded
  8. If Instance IsNot Nothing AndAlso Instance.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 FrameworkElement, 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.InstanceOverall
  33. If FrmInstanceOverall Is Nothing Then FrmInstanceOverall = New PageInstanceOverall
  34. Return FrmInstanceOverall
  35. Case FormMain.PageSubType.InstanceMod
  36. If FrmInstanceMod Is Nothing Then FrmInstanceMod = New PageInstanceMod
  37. Return FrmInstanceMod
  38. Case FormMain.PageSubType.InstanceModDisabled
  39. If FrmInstanceModDisabled Is Nothing Then FrmInstanceModDisabled = New PageInstanceModDisabled
  40. Return FrmInstanceModDisabled
  41. Case FormMain.PageSubType.InstanceSetup
  42. If IsNothing(FrmInstanceSetup) Then FrmInstanceSetup = New PageInstanceSetup
  43. Return FrmInstanceSetup
  44. Case FormMain.PageSubType.InstanceExport
  45. If FrmInstanceExport Is Nothing Then FrmInstanceExport = New PageInstanceExport
  46. Return FrmInstanceExport
  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 & ")", NotifyLevel.MsgBoxAndFeedback)
  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.InstanceMod
  94. PageInstanceMod.Refresh()
  95. ItemMod.Checked = True
  96. Case FormMain.PageSubType.InstanceExport
  97. If FrmInstanceExport IsNot Nothing Then FrmInstanceExport.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(FrmInstanceSetup) Then FrmInstanceSetup = New PageInstanceSetup
  104. FrmInstanceSetup.Reset()
  105. ItemSetup.Checked = True
  106. End If
  107. End Sub
  108. End Class