using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; using VideoConcat.Models; using RadioButton = System.Windows.Controls.RadioButton; namespace VideoConcat.Views { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { private VideoWindow? _videoWindow; private ExtractWindow? _extractWindow; public MainWindow() { InitializeComponent(); this.DataContext = new MainWindowModel(); // 窗口加载完成后执行 Loaded += MainView_Loaded; } public void MainView_Loaded(object sender, RoutedEventArgs e) { // 1. 为目标Grid创建列定义 SetupGridColumns(mainGrid); // 2. 实例化已有视图(或获取已存在的视图实例) _videoWindow = new VideoWindow(); // 这里是已有视图的实例 // 3. 将视图添加到指定列中(例如第1列,索引为1) AddViewToColumn(mainGrid, _videoWindow); } /// /// 为Grid设置列定义 /// private void SetupGridColumns(Grid grid) { // 清空现有列(可选) grid.Children.Clear(); } /// /// 将视图添加到Grid的指定列 /// /// 目标Grid /// 要添加的视图(UserControl/FrameworkElement) /// 列索引(从0开始) private void AddViewToColumn(Grid grid, FrameworkElement view) { // 将视图添加到Grid的子元素中 grid.Children.Add(view); } private void Border_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) { this.DragMove(); } } private void RadioButton_Checked(object sender, RoutedEventArgs e) { if (sender is RadioButton radioButton) { if (radioButton.Name == "extract") { // 切换到extract tab,检查是否有正在进行的处理 if (_extractWindow != null) { var viewModel = _extractWindow.DataContext as ViewModels.ExtractWindowViewModel; if (viewModel != null && viewModel.ExtractWindowModel.IsStart) { // 有正在进行的处理,允许切换,因为用户可能想查看进度 // 不做任何阻止操作 } } SetupGridColumns(mainGrid); // 如果已存在实例,重用;否则创建新实例 if (_extractWindow == null) { _extractWindow = new ExtractWindow(); } // 将视图添加到Grid中 AddViewToColumn(mainGrid, _extractWindow); } if (radioButton.Name == "video") { // 从extract切换到video时,检查是否有正在进行的处理 if (_extractWindow != null) { var viewModel = _extractWindow.DataContext as ViewModels.ExtractWindowViewModel; if (viewModel != null && viewModel.ExtractWindowModel.IsStart) { // 有正在进行的处理,显示提示并阻止切换 System.Windows.MessageBox.Show("当前有正在进行的处理任务,请等待处理完成后再切换!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); // 恢复extract tab的选中状态 radioButton.IsChecked = false; var extractRadioButton = FindName("extract") as RadioButton; if (extractRadioButton != null) { extractRadioButton.IsChecked = true; } return; } } SetupGridColumns(mainGrid); // 如果已存在实例,重用;否则创建新实例 if (_videoWindow == null) { _videoWindow = new VideoWindow(); } // 将视图添加到Grid中 AddViewToColumn(mainGrid, _videoWindow); } } } } }