MainWindow_Top.xaml.cs 7.0 KB
using BLL;
using SharpDocx.CodeBlocks;
using SmartScan.SetControl.WPF.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static SmartScan.SetControl.WPF.Model.NeoAlertBox;

namespace SmartScan.SetControl.WPF
{
    /// <summary>
    /// MainWindow_Top.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow_Top : UserControl
    { // 定义事件来与WinForms通信
        public event EventHandler MinimizeClicked;
        public event EventHandler MaximizeClicked;
        public event EventHandler CloseClicked;
        public event EventHandler<string> LanguageChanged;

        // 添加一个拖动请求事件
        public event EventHandler DragRequested;
        public MainWindow_Top()
        {
            InitializeComponent();
            // 从配置中获取当前语言
            string configLanguage = BLLCommon.config.Language;
            // 根据配置设置选择正确的ComboBoxItem
            SelectLanguageInUI(configLanguage);
            this.Loaded += (s, e) => {
                if (Logos is Image img)
                {
                    // 将WinForms资源转换为WPF可用的BitmapSource
                    System.Drawing.Bitmap winFormsBitmap = global::SmartScan.Properties.Resources.NEO_64;

                    if (winFormsBitmap != null)
                    {
                        var bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                            winFormsBitmap.GetHbitmap(),
                            IntPtr.Zero,
                            Int32Rect.Empty,
                            BitmapSizeOptions.FromEmptyOptions());

                        img.Source = bitmapSource;
                    }
                }
            };
            mf_name.Text = LanguageWwitchover.Dialog("TitleName", "物料注册系统");
            //this.StateChanged += MainWindow_StateChanged;
        }
        // 这个方法将被WinForms宿主调用
        public void BeginDragMove()
        {
            // 这个方法在WinForm中被调用,不会直接使用WPF DragMove方法
            // 而是通知WinForm父窗体进行拖动
            if (Window.GetWindow(this) == null)
            {
                // 触发一个事件,让WinForms知道要开始拖动
                DragRequested?.Invoke(this, EventArgs.Empty);
            }
        }
        private void SelectLanguageInUI(string language)
        {
            // 避免触发选择变更事件
            LanguageSelector.SelectionChanged -= LanguageSelector_SelectionChanged;

            bool found = false;

            // 遍历所有ComboBoxItem寻找匹配的语言
            foreach (ComboBoxItem item in LanguageSelector.Items)
            {
                if (item.Content is StackPanel panel &&
                    panel.Children[0] is System.Windows.Controls.TextBlock textBlock &&
                    textBlock.Text == language)
                {
                    // 找到匹配项,选择它
                    LanguageSelector.SelectedItem = item;
                    found = true;
                    break;
                }
            }

            // 如果没有找到匹配项,有可能以下几种情况:
            // 1. 配置中的语言值与UI中的显示不匹配
            // 2. UI中没有该语言选项
            // 3. UI控件结构与预期不同
            if (!found)
            {
                Console.WriteLine($"警告: 未找到匹配的语言UI选项: {language}");

                // 可以选择设置默认语言
                // 例如:如果英文是默认语言
                if (LanguageSelector.Items.Count > 0)
                {
                    LanguageSelector.SelectedIndex = 0;
                }
            }
            //if (language == "简体中文")
            //{
            //    mf_name.Text = "物料注册系统";
            //}
            //else if (language == "日语")
            //{
            //    mf_name.Text = "材料登録システム";
            //}
            //else
            //{
            //    mf_name.Text = "Material Registration System";
            //} 
            mf_name.Text = LanguageWwitchover.Dialog("TitleName", "物料注册系统");
            // 重新启用事件处理
            LanguageSelector.SelectionChanged += LanguageSelector_SelectionChanged;
        }
        // 更新窗口状态(正常/最大化)
        public void UpdateWindowState(bool isMaximized)
        {
            MaximizePath.Visibility = isMaximized ? Visibility.Collapsed : Visibility.Visible;
            RestorePath.Visibility = isMaximized ? Visibility.Visible : Visibility.Collapsed;
        }
        // 标题栏拖动 - 需要与WinForms窗口通信
        private void TitleBar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount == 2)
            {
                // 双击时触发最大化/还原
                MaximizeClicked?.Invoke(this, EventArgs.Empty);
                e.Handled = true;
            }
            
            else
            { // 开始拖动
                BeginDragMove();
                // 通过父窗体处理拖动
                // 这部分需要额外的代码在WinForms端处理
            }
        }
        
     
        private void MinimizeButton_Click(object sender, RoutedEventArgs e)
        {
            MinimizeClicked?.Invoke(this, EventArgs.Empty);
        }
        private void MaximizeButton_Click(object sender, RoutedEventArgs e)
        {
            MaximizeClicked?.Invoke(this, EventArgs.Empty);

        }
        private void CloseButton_Click(object sender, RoutedEventArgs e)
        {
            //MessageBoxResult result = System.Windows.MessageBox.Show("是否要关闭NeoScan?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Warning);


            string msg = LanguageWwitchover.Dialog("CloseNeoScan", "是否关闭NeoScan?");
            bool result = NeoAlertBox.Show("", msg, AlertType.Warning, "NEO SCAN", true);
            if (result)
            {
                CloseClicked?.Invoke(this, EventArgs.Empty);
            } 
        }

        private void LanguageSelector_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            // 处理语言更改
            if (LanguageSelector.SelectedItem is ComboBoxItem selectedItem &&
                selectedItem.Content is StackPanel panel &&
                panel.Children[0] is System.Windows.Controls.TextBlock textBlock)
            {
                string language = textBlock.Text;
                LanguageChanged?.Invoke(this, language);

                mf_name.Text = LanguageWwitchover.Dialog("TitleName", "物料注册系统");
            }
        }

     
    }
}