using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; 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; using MultiLayout; using MultiLayout.UiModule; namespace MultiLayout.MainEdit { /// <summary> /// Page_MainEditDynArea.xaml 的交互逻辑 /// </summary> public partial class PgMainEditDynArea : Page { FlyLayout layout; FlyLayoutManager manager; GageTabItem gageTabItem; ObservableCollection<MeComponentType> ToolboxItems; ObservableCollection<MeFlyComponent> Items; public PgMainEditDynArea() { 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.DynArea); Items = GraphConverter.GetMeFlyComponents(gageTabItem, gageTabItem.DynAreaItems, ToolboxItems); itemsControl_toolbox.ItemsSource = ToolboxItems; UpdateDynArea(); } void UpdateDynArea() { UpdateStackpanel(stackpanel_dynArea, 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(stackpanel_dynArea, c); } } break; case System.Collections.Specialized.NotifyCollectionChangedAction.Move: { Button button = stackpanel_dynArea.Children[e.OldStartingIndex] as Button; stackpanel_dynArea.Children.RemoveAt(e.OldStartingIndex); stackpanel_dynArea.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; stackpanel_dynArea.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.Name = "button_component"; b.Style = this.Resources["ButtonStyle_component"] as Style; b.Background = c.Type.Background; b.Click += button_componentEdit_Click; b.DataContext = c; b.Tag = c; stackpanel.Children.Add(b); } private void button_componentDel_Click(object sender, RoutedEventArgs e) { e.Handled = true; //向上找TabItem Button button = FLY.ControlLibrary.COMMON.GetParent<Button>(sender as DependencyObject, "button_component"); if (button == null) { //异常 return; } //string strTipComponentDel = Application.Current.FindResource("strTipComponentDel") as string; if (FLY.ControlLibrary.MyMessageBox.Show("组件将要被删除,是否确定?") == true) { MeFlyComponent c = button.Tag as MeFlyComponent; Items.Remove(c); } } 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; } WdDynAreaConfig w = new WdDynAreaConfig(); 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.DynAreaItems); NavigationService.GoBack(); } } }