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 { /// /// Page_MainEditDynArea.xaml 的交互逻辑 /// public partial class PgMainEditDynArea : Page { FlyLayout layout; FlyLayoutManager manager; GageTabItem gageTabItem; ObservableCollection ToolboxItems; ObservableCollection 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 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