using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace MultiLayout.MainEdit { /// <summary> /// PgMainEditGage.xaml 的交互逻辑 /// </summary> public partial class PgMainEditGage : Page { FlyLayoutManager manager; FlyLayout layout; ObservableCollection<GageTabItem> Items = new ObservableCollection<GageTabItem>(); public PgMainEditGage() { InitializeComponent(); } public void Init(FlyLayoutManager manager) { this.manager = manager; layout = this.manager.layout; if (layout.GageTabItems == null) { //完成没有设备 } else { string json = Newtonsoft.Json.JsonConvert.SerializeObject(layout.GageTabItems); var gageTabItems = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GageTabItem>>(json); foreach (var gageTabItem in gageTabItems) { Items.Add(gageTabItem); } } UpdateTabControl(); } void UpdateTabControl() { tabcontrol.Items.Clear(); for (int i = 0; i < Items.Count(); i++) { TabControlAdd(Items[i]); } Items.CollectionChanged += Items_CollectionChanged; } private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { switch (e.Action) { case System.Collections.Specialized.NotifyCollectionChangedAction.Add: { foreach (GageTabItem item in e.NewItems) { TabControlAdd(item); } tabcontrol.SelectedIndex = tabcontrol.Items.Count - 1; } break; case System.Collections.Specialized.NotifyCollectionChangedAction.Move: { TabItem ti_old = tabcontrol.Items[e.OldStartingIndex] as TabItem; if (tabcontrol.SelectedItem == ti_old) { tabcontrol.Items.RemoveAt(e.OldStartingIndex); tabcontrol.Items.Insert(e.NewStartingIndex, ti_old); tabcontrol.SelectedItem = ti_old; } else { tabcontrol.Items.RemoveAt(e.OldStartingIndex); tabcontrol.Items.Insert(e.NewStartingIndex, ti_old); } } break; case System.Collections.Specialized.NotifyCollectionChangedAction.Remove: { tabcontrol.Items.RemoveAt(e.OldStartingIndex); } break; } } void TabControlAdd(GageTabItem item) { TabItem ti = new TabItem() { Tag = item }; ti.SetBinding(TabItem.HeaderProperty, new Binding("Title") { Source = item }); UcMeGageTabItem uc = new UcMeGageTabItem(); uc.Init(item, manager); ti.Content = uc; tabcontrol.Items.Add(ti); } private void button_ok_Click(object sender, RoutedEventArgs e) { string strTipRebootForExecute = "需要重启,才能生效"; if (FLY.ControlLibrary.MyMessageBox.Show(strTipRebootForExecute) == true) { //保存!!!! layout.GageTabItems = Items.ToList(); layout.Save(); manager.MatchParam(); System.Windows.Forms.Application.Restart(); Application.Current.Shutdown(); } return; } private void button_itemAdd_Click(object sender, RoutedEventArgs e) { GageTabItem item = new GageTabItem(); Items.Add(item); } private void button_itemEdit_Click(object sender, RoutedEventArgs e) { //向上找TabItem TabItem tabitem = FLY.ControlLibrary.COMMON.GetParent<TabItem>(sender as DependencyObject); if (tabitem == null) { //异常 return; } int idx = Items.IndexOf(tabitem.Tag as GageTabItem); if (idx < 0) { //异常 return; } WdGageTabItemConfig w = new WdGageTabItemConfig(); w.Init(Items, idx, manager.serviceNames); w.Owner = FLY.ControlLibrary.COMMON.GetWindow(this); w.ShowDialog(); } private void button_itemDel_Click(object sender, RoutedEventArgs e) { e.Handled = true; //向上找TabItem TabItem tabitem = FLY.ControlLibrary.COMMON.GetParent<TabItem>(sender as DependencyObject); if (tabitem == null) { //异常 return; } int idx = Items.IndexOf(tabitem.Tag as GageTabItem); if (idx < 0) { //异常 return; } //提示是否删除 string strTipTabItemDel = "设备页面将要被删除, 是否确定?"; if (FLY.ControlLibrary.MyMessageBox.Show(strTipTabItemDel) == true) { Items.RemoveAt(idx); } } private void btnBackClick(object sender, RoutedEventArgs e) { if (FLY.ControlLibrary.MyMessageBox.Show("将要退出编辑,是否保存,然后重启生效?") == true) { //保存!!!! layout.GageTabItems = Items.ToList(); layout.Save(); manager.MatchParam(); System.Windows.Forms.Application.Restart(); Application.Current.Shutdown(); } else { NavigationService.GoBack(); } } } }