From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点
---
WPFProject/Controls/MainTabControl.xaml.cs | 233 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 233 insertions(+), 0 deletions(-)
diff --git a/WPFProject/Controls/MainTabControl.xaml.cs b/WPFProject/Controls/MainTabControl.xaml.cs
new file mode 100644
index 0000000..6b3fba5
--- /dev/null
+++ b/WPFProject/Controls/MainTabControl.xaml.cs
@@ -0,0 +1,233 @@
+锘縰sing HMI.Base;
+using HMI.Core.Api;
+using Panuon.WPF.UI;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+
+namespace WPFProject.Controls
+{
+ public class TabChangedEventArg
+ {
+ public IPlugin oldValue { get; set; }
+ public IPlugin newValue { get; set; }
+ }
+
+ /// <summary>
+ /// MainTabControl.xaml 鐨勪氦浜掗�昏緫
+ /// </summary>
+ public partial class MainTabControl : UserControl, INotifyPropertyChanged
+ {
+ #region ...
+ public virtual event PropertyChangedEventHandler PropertyChanged;
+
+ protected virtual void RaisePropertyChanged(string name)
+ {
+
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+ }
+
+ protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+ {
+ old = @new;
+ if (propertyName != null)
+ {
+ RaisePropertyChanged(propertyName);
+ }
+ }
+ #endregion
+
+ private WinFormHolder winFormHolder;
+ public MainTabControl()
+ {
+ MenuItems = new ObservableCollection<PluginInfo>(PluginLoader.GetLoader().Menus);
+ SubMenuItems = MenuItems[0].Children;
+ this.DataContext = this;
+ winFormHolder = new WinFormHolder();
+ InitializeComponent();
+ }
+
+ // Tab鍒囨崲浜嬩欢
+ public event EventHandler<TabChangedEventArg> TabChanged;
+
+ private ObservableCollection<PluginInfo> _MenuItems;
+
+ public ObservableCollection<PluginInfo> MenuItems
+ {
+ get { return _MenuItems; }
+ set
+ {
+ RaiseAndSetIfChanged(ref _MenuItems, value);
+ RaisePropertyChanged("MenuItemsCount");
+ }
+ }
+
+ public int MenuItemsCount
+ {
+ get => MenuItems == null ? 0 : MenuItems.Count;
+ }
+
+ private PluginInfo _SelectedMenu;
+
+ public PluginInfo SelectedMenu
+ {
+ get { return _SelectedMenu; }
+ set
+ {
+ RaiseAndSetIfChanged(ref _SelectedMenu, value);
+ }
+ }
+
+ private Dictionary<PluginInfo, PluginInfo> selectedCache = new Dictionary<PluginInfo, PluginInfo>();
+
+ private ObservableCollection<PluginInfo> _SubMenuItems;
+
+ public ObservableCollection<PluginInfo> SubMenuItems
+ {
+ get { return _SubMenuItems; }
+ set
+ {
+ RaiseAndSetIfChanged(ref _SubMenuItems, value);
+ RaisePropertyChanged("SubMenuItemsCount");
+ }
+ }
+
+ public int SubMenuItemsCount
+ {
+ get => MenuItems == null ? 0 : MenuItems.Count;
+ }
+
+ private PluginInfo _SelectedSubMenu;
+
+ public PluginInfo SelectedSubMenu
+ {
+ get { return _SelectedSubMenu; }
+ set => RaiseAndSetIfChanged(ref _SelectedSubMenu, value);
+ }
+
+ private Visibility _MenuVisibility = Visibility.Collapsed;
+ public Visibility MenuVisibility
+ {
+ get => _MenuVisibility;
+ set { RaiseAndSetIfChanged(ref _MenuVisibility, value); }
+ }
+
+ public void ChangeItemVisibility(bool visiable)
+ {
+ MenuVisibility = visiable ? Visibility.Visible : Visibility.Collapsed;
+ }
+
+ private void Menu_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (e.AddedItems?.Count > 0)
+ {
+ var data = (PluginInfo)e.AddedItems[0];
+ SubMenuItems = data?.Children;
+ if (selectedCache.ContainsKey(data))
+ {
+ SelectedSubMenu = selectedCache[data];
+ }
+ else if (SubMenuItems.Count > 0)
+ {
+ SelectedSubMenu = SubMenuItems[0];
+ }
+ }
+ }
+
+ private void SubMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (e.AddedItems?.Count > 0)
+ {
+ var data = (PluginInfo)e.AddedItems[0];
+ if (SelectedMenu != null)
+ {
+ selectedCache[SelectedMenu] = data;
+ }
+
+ var content = data.Content;
+ var newPlugin = PluginPackage.Get(content);
+ var last = PluginPackage.Get(page.Child);
+
+ if (last != null && !last.CanDeActive())
+ {
+ SelectedSubMenu = (PluginInfo)e.RemovedItems[0];
+ return;
+ }
+
+ if (newPlugin != null && !newPlugin.CanActive())
+ {
+ if (e.RemovedItems.Count > 0)
+ {
+ SelectedSubMenu = (PluginInfo)e.RemovedItems[0];
+ }
+ return;
+ }
+
+ last?.DeActive();
+ newPlugin?.Active();
+ if (data.Type == "WinForm")
+ {
+ if (content is System.Windows.Forms.Form form)
+ {
+ winFormHolder.Content = form;
+ }
+ else
+ {
+ winFormHolder.Content = content;
+ }
+ page.Child = winFormHolder;
+ }
+ else
+ {
+ page.Child = (UIElement)content;
+ }
+ TabChanged?.Invoke(this, new TabChangedEventArg { oldValue = last, newValue = newPlugin });
+ }
+ }
+
+ private void UserControl_Loaded(object sender, RoutedEventArgs e)
+ {
+ var ss = ((WindowX)Window.GetWindow(this));
+ /// binding WinformHost 閬僵
+ //Binding binding = new Binding("IsMaskVisible")
+ //{
+ // Source = ((WindowX)Window.GetWindow(this)),
+ // Mode = BindingMode.TwoWay,
+ // UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
+ //};
+ //winFormHolder.SetBinding(WinFormHolder.MaskVisiableProperty, binding);
+ if (MenuItems != null && MenuItems.Count > 0)
+ {
+ SelectedMenu = MenuItems[0];
+ }
+ Loaded -= UserControl_Loaded;
+ }
+
+ private string alarmInfo;
+ public string AlarmInfo
+ {
+ get => alarmInfo;
+ set
+ {
+ RaiseAndSetIfChanged(ref alarmInfo, value);
+ }
+ }
+
+ private void Button_Click_1(object sender, RoutedEventArgs e)
+ {
+ alarmBorder.Visibility = Visibility.Collapsed;
+ AlarmInfo = string.Empty;
+ }
+
+ public void ShowAlarm(string message)
+ {
+ AlarmInfo = message;
+ alarmBorder.Visibility = Visibility.Visible;
+ }
+ }
+}
--
Gitblit v1.9.1