using System.Windows;
using TeamAAS.Camera;
using TeamAAS.Dialogs;
using TeamAAS.ViewModels;
namespace TeamAAS
{
public partial class MainWindow
{
// 【调试开关】主页右上角“ResultRegistry 监控”按钮:调试期开启;生产发布前置为 false 即可隐藏入口。
private const bool EnableRegistryMonitorButton = true;
// 注册表监控窗口(非模式、单实例);关闭后置空,允许再次打开
private Views.RegistryDebugWindow _registryMonitorWindow;
public MainWindow(MainWindowViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
Loaded += MainWindow_Loaded;
Closing += MainWindow_Closing;
// 分辨率/DPI 自适应:主窗口计算全局缩放因子(1600x900 基准),所有弹窗跟随
UiScaler.AttachMain(this);
// 调试用:注册表监控按钮(图标经 IconKindConverter 安全解析;生产发布关掉上面的开关即隐藏)
RegistryMonitorIcon.Kind = IconKindConverter.ToKind("BugOutline");
RegistryMonitorButton.Visibility = EnableRegistryMonitorButton ? Visibility.Visible : Visibility.Collapsed;
}
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// 关窗前先停采集并断开所有相机,再正常退出应用。
// 不能用 Process.Kill():那是强制终止进程,OnExit 等一切清理事件都不会执行,
// 相机句柄会残留,导致下次启动打不开设备。
try { CameraManager.Instance.CloseAll(); } catch { }
Application.Current.Shutdown();
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
try
{
(DataContext as MainWindowViewModel)?.OnLoaded();
}
catch (System.Exception ex)
{
DialogHelper.ShowError("导航初始化失败", ex);
}
}
///
/// 右上角齿轮按钮:code-behind 显式控制主题面板开关。
/// 不走 IsOpen="{Binding IsChecked}" 绑定——非客户区(NonClientAreaContent)中
/// 该绑定链不可靠;点击是否到达、面板是否打开全部由代码显式驱动。
///
private void SettingsToggle_Click(object sender, RoutedEventArgs e)
{
var isOpen = SettingsToggle.IsChecked == true;
TeamAAS.AppLogger.Info($"SettingsToggle_Click: IsChecked={isOpen}", nameof(MainWindow));
if (ThemePopup == null) return;
if (isOpen)
{
// 显式指定 Popup 内容的 DataContext(Popup 子树的 DataContext 继承在非客户区不可靠)
ThemePopup.DataContext = DataContext;
ThemePopup.IsOpen = true;
}
else
{
ThemePopup.IsOpen = false;
}
}
/// 面板因点击外部等被关闭时,同步齿轮按钮的勾选状态,防止下次点击翻转错乱
private void ThemePopup_Closed(object sender, System.EventArgs e)
{
SettingsToggle.SetCurrentValue(System.Windows.Controls.Primitives.ToggleButton.IsCheckedProperty, false);
}
///
/// 【调试】打开 ResultRegistry 监控窗口(Main / Debug 并排显示,非模式单实例,已开则前置)。
/// 生产环境通过 EnableRegistryMonitorButton=false 隐藏入口。
///
private void RegistryMonitor_Click(object sender, RoutedEventArgs e)
{
try
{
if (_registryMonitorWindow != null)
{
_registryMonitorWindow.Activate();
return;
}
_registryMonitorWindow = new Views.RegistryDebugWindow { Owner = this };
_registryMonitorWindow.Closed += (s, args) => _registryMonitorWindow = null;
_registryMonitorWindow.Show();
}
catch (System.Exception ex)
{
DialogHelper.ShowError("打开注册表监控失败", ex);
}
}
}
}