using System.Windows; namespace DrillTools { /// /// 钻带涨缩参数设置窗口 /// public partial class DrillScalingWindow : Window { private readonly DrillScalingViewModel _viewModel; /// /// 用户确认后的缩放结果。 /// 保留模式与原始输入(用于系数记忆落盘),同时携带换算后的倍率(用于实际缩放)。 /// public (ScalingMode Mode, string InputX, string InputY, double Kx, double Ky)? ScalingResult { get; private set; } public DrillScalingWindow() { InitializeComponent(); _viewModel = new DrillScalingViewModel(); DataContext = _viewModel; } private void ModeRadioButton_Changed(object sender, RoutedEventArgs e) { if (_viewModel == null) return; if (RatioRadioButton.IsChecked == true) _viewModel.Mode = ScalingMode.Ratio; else if (PpmRadioButton.IsChecked == true) _viewModel.Mode = ScalingMode.Ppm; } private void ExecuteButton_Click(object sender, RoutedEventArgs e) { var error = _viewModel.Validate(); if (error != null) { ErrorText.Text = error; ErrorText.Visibility = Visibility.Visible; return; } ScalingResult = (_viewModel.Mode, _viewModel.InputX, _viewModel.InputY, _viewModel.Kx, _viewModel.Ky); DialogResult = true; Close(); } /// /// 载入上次涨缩系数:实时读取 ini 并回填模式与输入框。 /// RadioButton 与 Mode 为单向事件绑定,模式回填需手动同步 RadioButton 状态。 /// private void LoadLastButton_Click(object sender, RoutedEventArgs e) { try { var record = ScalingProfileStore.Load(); if (record == null) { System.Windows.MessageBox.Show("没有可载入的上次系数记录。", "载入上次系数", MessageBoxButton.OK, MessageBoxImage.Information); return; } // 先同步 RadioButton(设目标项为 true,靠同组互斥取消另一项,并触发 ModeRadioButton_Changed 联动 Mode 与派生标签),再回填输入框 if (record.Mode == ScalingMode.Ratio) RatioRadioButton.IsChecked = true; else PpmRadioButton.IsChecked = true; _viewModel.InputX = record.InputX; _viewModel.InputY = record.InputY; } catch (Exception ex) { System.Windows.MessageBox.Show($"载入上次系数失败:\n{ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } private void CancelButton_Click(object sender, RoutedEventArgs e) { ScalingResult = null; DialogResult = false; Close(); } } }