Files
xyou f70b061d1a
CI / Go Backend (push) Canceled after 0s
feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
2026-08-08 14:07:56 +08:00

169 lines
5.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}