初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using PCL.Core.App;
|
||||
|
||||
using PCL.Core.App.Localization;
|
||||
namespace PCL;
|
||||
|
||||
public partial class PageToolsLeft
|
||||
{
|
||||
private bool isLoad;
|
||||
private bool isPageSwitched; // 如果在 Loaded 前切换到其他页面,会导致触发 Loaded 时再次切换一次
|
||||
|
||||
public PageToolsLeft()
|
||||
{
|
||||
InitializeComponent();
|
||||
AnimatedControl = PanItem;
|
||||
Loaded += PageLinkLeft_Loaded;
|
||||
Unloaded += PageOtherLeft_Unloaded;
|
||||
}
|
||||
|
||||
private void PageLinkLeft_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var isHiddenPage = false;
|
||||
var hide = Config.Preference.Hide;
|
||||
|
||||
if (ItemGameLink.Checked && hide.ToolsGameLink) isHiddenPage = true;
|
||||
if (ItemTest.Checked && hide.ToolsTest) isHiddenPage = true;
|
||||
if (PageSetupUI.HiddenForceShow)
|
||||
isHiddenPage = false;
|
||||
// 若页面错误,或尚未加载,则继续
|
||||
if (isLoad && !isHiddenPage)
|
||||
return;
|
||||
isLoad = true;
|
||||
// 刷新子页面隐藏情况
|
||||
PageSetupUI.HiddenRefresh();
|
||||
// 选择第一个未被禁用的子页面
|
||||
if (isPageSwitched)
|
||||
return;
|
||||
var hideCfg = Config.Preference.Hide;
|
||||
if (!hideCfg.ToolsGameLink)
|
||||
ItemGameLink.SetChecked(true, false, false);
|
||||
else if (!hideCfg.ToolsTest)
|
||||
ItemTest.SetChecked(true, false, false);
|
||||
else
|
||||
ItemGameLink.SetChecked(true, false, false);
|
||||
}
|
||||
|
||||
private void PageOtherLeft_Unloaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
isPageSwitched = false;
|
||||
}
|
||||
|
||||
public void Refresh(object sender, EventArgs e)
|
||||
{
|
||||
var button = (MyIconButton)sender;
|
||||
if (button.Tag is null)
|
||||
return;
|
||||
double id = ModBase.Val(button.Tag);
|
||||
switch (id)
|
||||
{
|
||||
case (double)FormMain.PageSubType.ToolsGameLink:
|
||||
{
|
||||
if (ModMain.frmToolsGameLink is null)
|
||||
ModMain.frmToolsGameLink = new PageToolsGameLink();
|
||||
ModMain.frmToolsGameLink.Reload();
|
||||
ItemGameLink.Checked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region 页面切换
|
||||
|
||||
/// <summary>
|
||||
/// 当前页面的编号。
|
||||
/// </summary>
|
||||
public FormMain.PageSubType pageID = FormMain.PageSubType.ToolsGameLink;
|
||||
|
||||
/// <summary>
|
||||
/// 勾选事件改变页面。
|
||||
/// </summary>
|
||||
private void PageCheck(object senderRaw, ModBase.RouteEventArgs e)
|
||||
{
|
||||
var sender = (MyListItem)senderRaw;
|
||||
// 尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
|
||||
// 若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
|
||||
if (sender.Tag is not null)
|
||||
PageChange((FormMain.PageSubType)ModBase.Val(sender.Tag));
|
||||
}
|
||||
|
||||
public object PageGet(FormMain.PageSubType? id = null)
|
||||
{
|
||||
var targetID = id ?? pageID;
|
||||
switch (id)
|
||||
{
|
||||
case FormMain.PageSubType.ToolsGameLink:
|
||||
{
|
||||
if (ModMain.frmToolsGameLink is null)
|
||||
ModMain.frmToolsGameLink = new PageToolsGameLink();
|
||||
return ModMain.frmToolsGameLink;
|
||||
}
|
||||
case FormMain.PageSubType.ToolsTest:
|
||||
{
|
||||
if (ModMain.frmToolsTest is null)
|
||||
ModMain.frmToolsTest = new PageToolsTest();
|
||||
return ModMain.frmToolsTest;
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw new Exception("未知的更多子页面种类:" + (int)id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 切换现有页面。
|
||||
/// </summary>
|
||||
public void PageChange(FormMain.PageSubType id)
|
||||
{
|
||||
if (pageID == id)
|
||||
return;
|
||||
ModAnimation.AniControlEnabled += 1;
|
||||
isPageSwitched = true;
|
||||
try
|
||||
{
|
||||
PageChangeRun((MyPageRight)PageGet(id));
|
||||
pageID = id;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ModBase.Log(
|
||||
ex,
|
||||
$"切换分页面失败(ID {(int)id})",
|
||||
ModBase.LogLevel.Feedback,
|
||||
userSummary: Lang.Text("Tools.Error.OperationFailed"));
|
||||
}
|
||||
finally
|
||||
{
|
||||
ModAnimation.AniControlEnabled -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
private static void PageChangeRun(MyPageRight target)
|
||||
{
|
||||
ModAnimation.AniStop("FrmMain PageChangeRight"); // 停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
|
||||
if (target.Parent is not null)
|
||||
target.SetValue(ContentPresenter.ContentProperty, null);
|
||||
ModMain.frmMain.pageRight = target;
|
||||
((MyPageRight)ModMain.frmMain.PanMainRight.Child).PageOnExit();
|
||||
ModAnimation.AniStart(new[]
|
||||
{
|
||||
ModAnimation.AaCode(() =>
|
||||
{
|
||||
((MyPageRight)ModMain.frmMain.PanMainRight.Child).PageOnForceExit();
|
||||
ModMain.frmMain.PanMainRight.Child = ModMain.frmMain.pageRight;
|
||||
ModMain.frmMain.pageRight.Opacity = 0d;
|
||||
}, 130),
|
||||
ModAnimation.AaCode(() =>
|
||||
{
|
||||
// 延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
|
||||
ModMain.frmMain.pageRight.Opacity = 1d;
|
||||
ModMain.frmMain.pageRight.PageOnEnter();
|
||||
}, 30, true)
|
||||
}, "PageLeft PageChange");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user