alielie
2025-03-04 2b1a6417285597bc58ef28aa3f01aeee2532cd19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using HMI.Base;
using HMI.Core.Api;
using WPFProject.UI;
 
namespace WPFProject.Controls
{
    /// <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
 
        public MainTabControl()
        {
            IPlugin plugin = new WorkControl();
            MenuItems = PluginLoader.GetLoader().Menus;
            SubMenuItems = MenuItems[0].Children;
            this.DataContext = this;
            InitializeComponent();
        }
 
        // Tab切换事件
        public static readonly RoutedEvent OnTabChangeEvent =
             EventManager.RegisterRoutedEvent("OnTabChange", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MenuTabControl));
 
        public event RoutedEventHandler OnTabChange
        {
            add
            {
                AddHandler(OnTabChangeEvent, value);
            }
 
            remove
            {
                RemoveHandler(OnTabChangeEvent, value);
            }
        }
 
        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 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()
        {
            MenuVisibility = MenuVisibility == Visibility.Collapsed ? 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;
            }
        }
 
        private void SwithMenu(PluginInfo menu)
        {
 
        }
 
 
        private void SubMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems?.Count > 0)
            {
                var data = (PluginInfo)e.AddedItems[0];
                var content = (UIElement)data.Content;
                var last = (IPlugin)page.Child;
                last?.DeActive();
                page.Child = content;
                ((IPlugin)content)?.Active();
            }
        }
    }
}