using MultiLayout.UiModule; using System; using System.Collections.Generic; using System.Collections.ObjectModel; 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.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace MultiLayout.MainEdit { /// <summary> /// PgMeMenu.xaml 的交互逻辑 /// </summary> public partial class PgMeMenu : Page { FlyLayout layout; FlyLayoutManager manager; GageTabItem gageTabItem; ObservableCollection<MeComponentType> ToolboxItems; ObservableCollection<MeFlyComponent> Items; public PgMeMenu() { InitializeComponent(); } public void Init(GageTabItem gageTabItem, FlyLayoutManager manager) { this.manager = manager; layout = manager.layout; this.gageTabItem = gageTabItem; this.DataContext = gageTabItem; ToolboxItems = GraphConverter.GetToolboxItems(this.manager, ComponentType.Menu); Items = GraphConverter.GetMeFlyComponents(gageTabItem, gageTabItem.MenuItems, ToolboxItems); itemsControl_toolbox.ItemsSource = ToolboxItems; UpdateMenu(); } void UpdateMenu() { UpdateStackpanel(spMenu, Items); Items.CollectionChanged += Items_CollectionChanged; UpdateComponentTypeCount(); } private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { switch (e.Action) { case System.Collections.Specialized.NotifyCollectionChangedAction.Add: { foreach (MeFlyComponent c in e.NewItems) { var gct = c.Type; gct.Count++; ButtonComponentAdd(spMenu, c); } } break; case System.Collections.Specialized.NotifyCollectionChangedAction.Move: { Button button = spMenu.Children[e.OldStartingIndex] as Button; spMenu.Children.RemoveAt(e.OldStartingIndex); spMenu.Children.Insert(e.NewStartingIndex, button); } break; case System.Collections.Specialized.NotifyCollectionChangedAction.Remove: { foreach (MeFlyComponent c in e.OldItems) { var gct = c.Type; gct.Count--; Button button = c.mButton; spMenu.Children.Remove(button); } } break; } } void UpdateComponentTypeCount() { foreach (var type in ToolboxItems) { type.Count = Items.Count((c) => { return c.Type == type; }); } } void UpdateStackpanel(StackPanel stackpanel, ObservableCollection<MeFlyComponent> components) { stackpanel.Children.Clear(); //添加 控件 for (int i = 0; i < components.Count(); i++) { var c = components[i]; ButtonComponentAdd(stackpanel, c); } } void ButtonComponentAdd(StackPanel stackpanel, MeFlyComponent c) { Button b = new Button(); c.mButton = b; b.Background = c.Type.Background; b.Click += button_componentEdit_Click; b.DataContext = c; b.Tag = c; stackpanel.Children.Add(b); } private void button_componentNew_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; var gct = button.Tag as MeComponentType; if (!gct.IsEnable) { string strTipCantAddAgain = "不能再次添加"; FLY.ControlLibrary.MyMessageBox.Show(strTipCantAddAgain); return; } var c = new MeFlyComponent() { Type = gct, ServiceContainerName = gageTabItem.ServiceContainerName }; Items.Add(c); } private void button_componentEdit_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; var c = button.Tag as MeFlyComponent; int idx = Items.IndexOf(c); if (idx == -1) { //异常 return; } WdMenuConfig w = new WdMenuConfig(); w.Init(Items, idx, manager.serviceNames); w.Owner = FLY.ControlLibrary.COMMON.GetWindow(this); w.ShowDialog(); } private void btnBackClick(object sender, RoutedEventArgs e) { GraphConverter.ToFlyComponents(Items, gageTabItem, gageTabItem.MenuItems); NavigationService.GoBack(); } } }