using MembranePoreTester.ViewModels; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace MembranePoreTester.Views { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); HistoryWindow.LoadRecordEvent += OnLoadRecord; } private void OnLoadRecord(object sender, LoadRecordEventArgs e) { var mainVM = DataContext as MainViewModel; if (mainVM == null) return; // 根据工位和类型找到对应的 ViewModel if (e.Type == "泡点法") { var targetVM = mainVM.Stations[e.TargetStation - 1].BubblePointVM; targetVM.LoadFromDatabase(e.RecordId); } else { var targetVM = mainVM.Stations[e.TargetStation - 1].PoreDistributionVM; targetVM.LoadFromDatabase(e.RecordId); } } private void OpenHistory_Click(object sender, RoutedEventArgs e) { var mainVM = DataContext as MainViewModel; if (mainVM == null) return; // 获取当前选中的工位索引(假设选项卡控件是 TabControl,名称为 stationTabControl) // 需要在 XAML 中为 TabControl 设置 x:Name="stationTabControl" int currentStation = stationTabControl.SelectedIndex + 1; // 假设索引从0开始 var historyWin = new HistoryWindow { SelectedStation = currentStation }; historyWin.ShowDialog(); } private void Window_KeyDown(object sender, KeyEventArgs e) { if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.P) { var win = new ParameterWindow(); win.Owner = this; win.ShowDialog(); } } private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selectedStation = stationTabControl.SelectedItem as MainViewModel.StationItem; if (selectedStation != null) { var content = stationTabControl.SelectedContent as ContentPresenter; if (content != null) { var innerTabControl = FindVisualChild(content); if (innerTabControl != null) { var selectedTabItem = innerTabControl.SelectedItem as TabItem; bool isPoreDistributionActive = selectedTabItem?.Header?.ToString() == "孔分布测试"; // 关键:设置 StationItem 的状态 selectedStation.IsPoreDistributionActive = isPoreDistributionActive; selectedStation.PoreDistributionVM.IsActive = isPoreDistributionActive; if (isPoreDistributionActive) { // 切换到孔分布时,清空之前的数据 selectedStation.PoreDistributionVM.ClearData(); } else { // 离开孔分布界面时,停止自动采集 selectedStation.PoreDistributionVM.StopCollecting(); } } } } } // 辅助方法:查找 Visual Tree 中的指定类型元素 private T FindVisualChild(DependencyObject parent) where T : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); if (child is T t) return t; var result = FindVisualChild(child); if (result != null) return result; } return null; } } }