// Если кто-то будет смотреть или редактировать этот код // Простите меня ;( public void SaveProjectExecute(TabControl testTabControl, string Path, int mainNumber) { tempTabControl = testTabControl; project = new SaveProject(); for (int i = 0; i < tempTabControl.Items.Count; i++) //foreach (TabItem item in tempTabControl.Items) { TabItem item = tempTabControl.Items[i] as TabItem; if (!(processSaved.ContainsKey(item.Header as Process))) { String name = (item.Header as Process).Description; var drawArea = item.Content as DrawArea; // Достаём область рисования var savedProc = SaveProcessExecute(drawArea.Children, name); project.ProcessList.Add(savedProc); // Сохраняем процессы processSaved.Add(item.Header as Process, savedProc.ProcessId); if (mainNumber == i) { project.MainProcessID = savedProc.ProcessId; } } } // Записываем информацию о проекте using (FileStream stream = new FileStream(Path, FileMode.Create)) { DataContractSerializer ser = new DataContractSerializer(typeof(SaveProject), types); ser.WriteObject(stream, project); } }
/// <summary> /// Загрузка проекта /// </summary> /// <param name="path"></param> /// <param name="testTabControl"></param> /// <param name="drawAreas"></param> /// <param name="processes"></param> /// <param name="mainprocess"></param> /// <returns></returns> public int LoadProjectExecute(string path, TabControl testTabControl, List <DrawArea> drawAreas, List <Process> processes, out Process mainprocess) { SaveProject temp = null; // Считываем иформацию о проекте using (FileStream stream = new FileStream(path, FileMode.Open)) { DataContractSerializer ser = new DataContractSerializer(typeof(SaveProject), types); temp = (ser.ReadObject(stream)) as SaveProject; } mainprocess = null; int num = 0; // Очищаем информацию testTabControl.Items.Clear(); drawAreas.Clear(); processes.Clear(); List <TabItem> tabitems = new List <TabItem>(); // Проходим по каждому процессу for (int i = 0; i < temp.ProcessList.Count; i++) { // Создаём процесс Process process = new Process() { Description = temp[i].ProcessName }; processes.Add(process); // Добавляем в список процессов var tabItem = new TabItem() { Header = process }; testTabControl.SelectedItem = tabItem; // Создаём область рисования var drawArea = new DrawArea() { Processes = processes }; drawAreas.Add(drawArea); tabItem.Content = drawArea; LoadProcess(temp[i], drawArea); processWorked.Add(temp[i].ProcessId, process); if (temp.MainProcessID == temp[i].ProcessId) { mainprocess = process; num = i; } //testTabControl.Items.Add(tabItem); tabitems.Add(tabItem); } // А теперь добавляем, чтобы было в нормальном порядке tabitems.Reverse(); foreach (var ch in tabitems) { testTabControl.Items.Add(ch); } //testTabControl.ItemsSource = tabitems; return(num); }