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 { /// /// MainTabControl.xaml 的交互逻辑 /// 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(ref T old, T @new, [CallerMemberName] string propertyName = null) { old = @new; if (propertyName != null) { RaisePropertyChanged(propertyName); } } #endregion public MainTabControl() { IPlugin plugin = new WorkControl(); MenuItems = new ObservableCollection( 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 _MenuItems; public ObservableCollection 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 _SubMenuItems; public ObservableCollection 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; } } 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(); } } } }