| | |
| | | using System.Collections.ObjectModel; |
| | | using 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 HMI.Base; |
| | | using HMI.Core.Api; |
| | | using WPFProject.UI; |
| | | using System.Windows.Data; |
| | | |
| | | namespace WPFProject.Controls |
| | | { |
| | | public class TabChangedEventArg |
| | | { |
| | | public IPlugin oldValue { get; set; } |
| | | public IPlugin newValue { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// MainTabControl.xaml 的交互逻辑 |
| | | /// </summary> |
| | |
| | | } |
| | | #endregion |
| | | |
| | | private WinFormHolder winFormHolder; |
| | | public MainTabControl() |
| | | { |
| | | IPlugin plugin = new WorkControl(); |
| | | MenuItems = PluginLoader.GetLoader().Menus; |
| | | MenuItems = new ObservableCollection<PluginInfo>(PluginLoader.GetLoader().Menus); |
| | | SubMenuItems = MenuItems[0].Children; |
| | | this.DataContext = this; |
| | | winFormHolder = new WinFormHolder(); |
| | | 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); |
| | | } |
| | | } |
| | | public event EventHandler<TabChangedEventArg> TabChanged; |
| | | |
| | | private ObservableCollection<PluginInfo> _MenuItems; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | private Dictionary<PluginInfo, PluginInfo> selectedCache = new Dictionary<PluginInfo, PluginInfo>(); |
| | | |
| | | private ObservableCollection<PluginInfo> _SubMenuItems; |
| | | |
| | |
| | | set { RaiseAndSetIfChanged(ref _MenuVisibility, value); } |
| | | } |
| | | |
| | | public void ChangeItemVisibility() |
| | | public void ChangeItemVisibility(bool visiable) |
| | | { |
| | | MenuVisibility = MenuVisibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed; |
| | | MenuVisibility = visiable ? Visibility.Visible : Visibility.Collapsed; |
| | | } |
| | | |
| | | private void Menu_SelectionChanged(object sender, SelectionChangedEventArgs e) |
| | |
| | | { |
| | | 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 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; |
| | | 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(); |
| | | page.Child = content; |
| | | ((IPlugin)content)?.Active(); |
| | | 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 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; |
| | | } |
| | | } |
| | | } |