using System; using System.ComponentModel; using System.Windows.Forms; using DevExpress.XtraTab; using Lskj.Business; using Lskj.Model; namespace Lskj.Main.Control { /// 新版 WPF 主界面的 WinForms 过渡版。 public partial class MainPanelControlEx2 : UserControl { private ToolStripMenuItem _selectedTopMenu; private bool _styleUpdatePending; private bool _shortcutRedrawSuppressed; private string _styledSubSysId; private string _styledSubSysName; public MainPanelControlEx2() { InitializeComponent(); // 运行时必须等旧控件 OnLoad 完成后再改菜单布局;否则旧逻辑会按 // 构造阶段的默认宽度计算“更多”,导致一级目录全部被收进去。 // 设计器不会触发业务 OnLoad,因此仅在设计时直接套用预览样式。 if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) ApplyWpfShellStyle(); } public float DpiX { get { return _legacyPanel.DpiX; } set { _legacyPanel.DpiX = value; } } public float DpiY { get { return _legacyPanel.DpiY; } set { _legacyPanel.DpiY = value; } } public int plTopHeight { get { return _legacyPanel.plTopHeight; } } public FormWindowState State { get { return _legacyPanel.State; } set { _legacyPanel.State = value; } } public XtraTabControl TabMain { get { return _legacyPanel.TabMain; } } public Panel MainPanel { get { return _legacyPanel.MainPanel; } } public AwaitScreenControl AwaitControl { get { return _legacyPanel.AwaitControl; } } public PictureBox pic_search { get { return _legacyPanel.pic_search; } } public event EventHandler OnMaxButtonCallBack { add { _legacyPanel.OnMaxButtonCallBack += value; } remove { _legacyPanel.OnMaxButtonCallBack -= value; } } public event EventHandler OnMinButtonCallBack { add { _legacyPanel.OnMinButtonCallBack += value; } remove { _legacyPanel.OnMinButtonCallBack -= value; } } public event EventHandler OnCloseButtonCallBack { add { _legacyPanel.OnCloseButtonCallBack += value; } remove { _legacyPanel.OnCloseButtonCallBack -= value; } } public event EventHandler OnTopPanelMouseDoubleClickCallBack { add { _legacyPanel.OnTopPanelMouseDoubleClickCallBack += value; } remove { _legacyPanel.OnTopPanelMouseDoubleClickCallBack -= value; } } public event MouseEventHandler OnTopMouseDownCallback { add { _legacyPanel.OnTopMouseDownCallback += value; } remove { _legacyPanel.OnTopMouseDownCallback -= value; } } public event MouseEventHandler OnTopMouseUpCallBack { add { _legacyPanel.OnTopMouseUpCallBack += value; } remove { _legacyPanel.OnTopMouseUpCallBack -= value; } } public event MouseEventHandler OnTopMouseMoveCallBack { add { _legacyPanel.OnTopMouseMoveCallBack += value; } remove { _legacyPanel.OnTopMouseMoveCallBack -= value; } } /// 保持旧 FrmMain 的 OnLoad 调用契约,在菜单绑定完成后应用新版样式。 public void OnLoad() { _legacyPanel.OnLoad(); ApplyWpfShellStyle(); } private void TopMenuItem_Click(object sender, EventArgs e) { SelectTopMenu(sender as ToolStripMenuItem); ResetBrandArea(); // 切换一级目录时旧逻辑会重建左侧菜单,下一帧重新套用新版布局。 if (IsNavigationChangedSinceLastStyle()) RequestApplyWpfShellStyle(); } private static bool IsGroupedSidebarMode() { // 设计器预览不能访问数据库;预览时直接采用新版分组侧栏样式。 if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) return true; // 与旧主界面使用同一份系统参数,避免新版界面出现目录不一致。 return "1".Equals((SystemInfo.Instance.MainLeftShowMode ?? string.Empty).Trim()); } private bool IsNavigationChangedSinceLastStyle() { if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) return false; string id = (ERPInfo.Instance.SubSysId ?? string.Empty).Trim(); string name = (ERPInfo.Instance.SubSysName ?? string.Empty).Trim(); return !string.Equals(id, _styledSubSysId, StringComparison.OrdinalIgnoreCase) || !string.Equals(name, _styledSubSysName, StringComparison.OrdinalIgnoreCase); } private void RememberStyledNavigation() { if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) return; _styledSubSysId = (ERPInfo.Instance.SubSysId ?? string.Empty).Trim(); _styledSubSysName = (ERPInfo.Instance.SubSysName ?? string.Empty).Trim(); } /// /// 合并同一消息循环内由顶部菜单点击、下拉框关闭等事件发起的重复重绘。 /// 旧版切换目录本身已经重建快捷通道,重复套用样式会造成右侧闪烁。 /// private void RequestApplyWpfShellStyle() { if (!IsHandleCreated || _styleUpdatePending) return; _styleUpdatePending = true; BeginInvoke((MethodInvoker)(() => { _styleUpdatePending = false; if (!IsDisposed) { ApplyWpfShellStyle(); if (_shortcutRedrawSuppressed) SetShortcutRedraw(true); } })); } } }