using MaterialDesignThemes.Wpf; using SamplePre.Models.Tables; using SamplePre.UIWpf; using SamplePre.UIWpf.ConfigManager; using SamplePre.UIWpf.ParamManager; using SamplePre.UIWpf.QueryManager; using SamplePre.UIWpf.SampleManager; using SamplePreSystem.UI; using SamplePreSystem.UI.ConfigManager; using SamplePreSystem.UI.ViewModel.Login; using SamplePreSystem.UI.Views; 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.Animation; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace SamplePreSystemApp { /// /// AppMainView.xaml 的交互逻辑 /// public partial class AppMainView : Window { private bool _isMaximized = false; // 窗口是否最大化 private Rect _normalWindowRect; // 记录还原时的位置大小 private MonitorView monitorView; public AppMainView() { InitializeComponent(); AppMainViewModel vm = new AppMainViewModel(); this.DataContext = vm; var view = CollectionViewSource.GetDefaultView(vm.MenuBars) as ListCollectionView; //按照Name分组 view.GroupDescriptions.Add(new PropertyGroupDescription("description")); } private void Window_Loaded(object sender, RoutedEventArgs e) { MaximizeWindow(); //打开样品监控 OpenSampleMonitor(); } private void btnMin_Click(object sender, RoutedEventArgs e) { this.WindowState = WindowState.Minimized; //MaximizeWindow(); } private void btnMax_Click(object sender, RoutedEventArgs e) { MaximizeWindow(); } private void btnClose_Click(object sender, RoutedEventArgs e) { if (MessageBox.Show("是否退出系统?", "退出提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { this.Close(); } } private void btnUserInfo_Click(object sender, RoutedEventArgs e) { // 打开用户信息窗口 UserInfoWindow userInfoWindow = new UserInfoWindow(); userInfoWindow.ShowDialog(); } public void MaximizeWindow() { if (_isMaximized) { // 还原 this.WindowState = WindowState.Normal; this.Left = _normalWindowRect.Left; this.Top = _normalWindowRect.Top; this.Width = _normalWindowRect.Width; this.Height = _normalWindowRect.Height; //BtnMaximize.Content = new PackIcon { Kind = PackIconKind.WindowMaximize, Width = 16, Height = 16, Foreground = Brushes.White }; } else { // 先记录当前位置 _normalWindowRect = new Rect(this.Left, this.Top, this.Width, this.Height); // 工作区最大化(不挡任务栏) var workArea = SystemParameters.WorkArea; this.Left = workArea.Left; this.Top = workArea.Top; this.Width = workArea.Width; this.Height = workArea.Height; //BtnMaximize.Content = new PackIcon { Kind = PackIconKind.WindowRestore, Width = 16, Height = 16, Foreground = Brushes.White }; } _isMaximized = !_isMaximized; } /// /// 拖拽标题栏 /// /// /// private void ColorZone_MouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { this.DragMove(); } } /// /// 打开功能界面 /// /// /// private void FuncListbox_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 获取 ListBox 本身 ListBox listBox = sender as ListBox; // 获取选中项 var selectedItem = listBox.SelectedItem as MenuBarFuc; //this.txt_currFunc.Text = selectedItem.name; switch (selectedItem.id) { case 5: OpenSampleMonitor(); break; case 6: this.MainFrame.Navigate(new SampleExecView()); break; case 8: this.MainFrame.Navigate(new SampleQueryView()); break; case 9: break; case 10: this.MainFrame.Navigate(new ParamManagerView()); break; case 11: this.MainFrame.Navigate(new ActionManagerView()); break; case 12: this.MainFrame.Navigate(new SopManagerView()); break; case 13: this.MainFrame.Navigate(new UsersView()); break; case 14: this.MainFrame.Navigate(new RoleView()); break; case 15: this.MainFrame.Navigate(new SysConfigMangerView()); break; default: break; } } /// /// 打开首页,监控界面 /// /// /// private void btnMonitor_Click(object sender, RoutedEventArgs e) { OpenSampleMonitor(); } public void OpenSampleMonitor() { if (monitorView == null) { monitorView = new MonitorView(); } this.MainFrame.Navigate(monitorView); } // 收缩菜单:宽度=0,内容隐藏 private void MenuToggleButton_Checked(object sender, RoutedEventArgs e) { MenuContent.Visibility = Visibility.Collapsed; MenuContainer.BeginAnimation(Grid.WidthProperty, new DoubleAnimation(0, TimeSpan.FromMilliseconds(200))); //MenuToggleButton.Foreground = new SolidColorBrush(Color.FromArgb(1,0,113,203)); MenuToggleButton.Foreground = new SolidColorBrush(Color.FromRgb(0, 113, 203)); } // 展开菜单:宽度=220,内容显示 private void MenuToggleButton_Unchecked(object sender, RoutedEventArgs e) { MenuContainer.BeginAnimation(Grid.WidthProperty, new DoubleAnimation(200, TimeSpan.FromMilliseconds(200))); MenuContent.Visibility = Visibility.Visible; MenuToggleButton.Foreground = new SolidColorBrush(Colors.White); } /// /// 分组标题点击事件 → 折叠/展开子项 /// private void GroupHeader_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { // 获取点击的标题容器 var border = sender as Border; if (border == null) return; // 获取箭头图标 var icon = FindVisualChild(border); // 获取子项容器 var itemsPresenter = FindVisualChild(border.Parent as FrameworkElement); if (icon == null || itemsPresenter == null) return; // 切换折叠/展开状态 if (icon.Tag.ToString() == "Expanded") { // 折叠 icon.Kind = PackIconKind.ChevronRight; icon.Tag = "Collapsed"; itemsPresenter.Visibility = Visibility.Collapsed; } else { // 展开 icon.Kind = PackIconKind.ChevronDown; icon.Tag = "Expanded"; itemsPresenter.Visibility = Visibility.Visible; } } /// /// 可视化树查找子元素(通用工具方法) /// 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 result) return result; var childResult = FindVisualChild(child); if (childResult != null) return childResult; } return null; } } }