Public Class PageInstanceLeft Implements IRefreshable ''' ''' 当前显示设置的 MC 版本。 ''' Public Shared Instance As McInstance = Nothing Public Sub RefreshModDisabled() Handles Me.Loaded If Instance IsNot Nothing AndAlso Instance.Modable Then ItemMod.Visibility = Visibility.Visible ItemModDisabled.Visibility = Visibility.Collapsed Else ItemMod.Visibility = Visibility.Collapsed ItemModDisabled.Visibility = Visibility.Visible End If End Sub #Region "页面切换" ''' ''' 当前页面的编号。从 0 开始计算。 ''' Public PageID As FormMain.PageSubType = FormMain.PageSubType.Default ''' ''' 勾选事件改变页面。 ''' Private Sub PageCheck(sender As FrameworkElement, e As RouteEventArgs) Handles ItemOverall.Check, ItemMod.Check, ItemModDisabled.Check, ItemSetup.Check, ItemExport.Check '尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0 '若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False) If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag)) End Sub Public Function PageGet(Optional ID As FormMain.PageSubType = -1) If ID = -1 Then ID = PageID Select Case ID Case FormMain.PageSubType.InstanceOverall If FrmInstanceOverall Is Nothing Then FrmInstanceOverall = New PageInstanceOverall Return FrmInstanceOverall Case FormMain.PageSubType.InstanceMod If FrmInstanceMod Is Nothing Then FrmInstanceMod = New PageInstanceMod Return FrmInstanceMod Case FormMain.PageSubType.InstanceModDisabled If FrmInstanceModDisabled Is Nothing Then FrmInstanceModDisabled = New PageInstanceModDisabled Return FrmInstanceModDisabled Case FormMain.PageSubType.InstanceSetup If IsNothing(FrmInstanceSetup) Then FrmInstanceSetup = New PageInstanceSetup Return FrmInstanceSetup Case FormMain.PageSubType.InstanceExport If FrmInstanceExport Is Nothing Then FrmInstanceExport = New PageInstanceExport Return FrmInstanceExport Case Else Throw New Exception("未知的版本设置子页面种类:" & ID) End Select End Function ''' ''' 切换现有页面。 ''' Public Sub PageChange(ID As FormMain.PageSubType) If PageID = ID Then Return AniControlEnabled += 1 Try PageChangeRun(PageGet(ID)) PageID = ID Catch ex As Exception Logger.Error(ex, $"切换分页面失败(ID {ID})") Finally AniControlEnabled -= 1 End Try End Sub Private Shared Sub PageChangeRun(Target As MyPageRight) AniStop("FrmMain PageChangeRight") '停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter If Target.Parent IsNot Nothing Then Target.SetValue(ContentPresenter.ContentProperty, Nothing) FrmMain.PageRight = Target CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnExit() AniStart({ AaCode(Sub() CType(FrmMain.PanMainRight.Child, MyPageRight).PageOnForceExit() FrmMain.PanMainRight.Child = FrmMain.PageRight FrmMain.PageRight.Opacity = 0 End Sub, 130), AaCode(Sub() '延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理 FrmMain.PageRight.Opacity = 1 FrmMain.PageRight.PageOnEnter() End Sub, 30, True) }, "PageLeft PageChange") End Sub #End Region Public Sub Refresh_Click(sender As Object, e As EventArgs) '由边栏按钮匿名调用 Refresh(Val(sender.Tag)) End Sub Public Sub Refresh() Implements IRefreshable.Refresh Refresh(FrmMain.PageCurrentSub) End Sub Public Sub Refresh(SubType As FormMain.PageSubType) Select Case SubType Case FormMain.PageSubType.InstanceMod PageInstanceMod.Refresh() ItemMod.Checked = True Case FormMain.PageSubType.InstanceExport If FrmInstanceExport IsNot Nothing Then FrmInstanceExport.RefreshAll() ItemExport.Checked = True End Select End Sub Public Sub Reset(sender As Object, e As EventArgs) If MyMsgBox("是否要初始化该版本的版本独立设置?该操作不可撤销。", "初始化确认",, "取消", IsWarn:=True) = 1 Then If IsNothing(FrmInstanceSetup) Then FrmInstanceSetup = New PageInstanceSetup FrmInstanceSetup.Reset() ItemSetup.Checked = True End If End Sub '加载当前版本将要选择的 Java Public Shared CurrentJavaWorker As New RedoableWorker(Of Java)(Function(c, p) SelectOrDownloadJava(PageInstanceLeft.Instance, False, c, p)) Public Shared Sub ReloadCurrentJava() Handles Me.Loaded If AniControlEnabled <> 0 Then Return If PageInstanceLeft.Instance Is Nothing Then Return CurrentJavaWorker.Start() End Sub End Class