public ImageTreeViewItem(ImageSource img, string header, iItemData data = null) { Image = img; Header = header; this.Tag = Tag; _data = data; }
private void PptComponent_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { if (e.NewValue.GetType() == typeof(ImageTreeViewItem)) { ImageTreeViewItem itm = (ImageTreeViewItem)e.NewValue; iItemData itmdata = itm.data; ImageButton[] ableAddBtns, unableAddBtns; ableAddBtns = new ImageButton[] { }; unableAddBtns = new ImageButton[] { AddEnumBtn, AddFuncBtn, AddSubBtn, AddTypeBtn, EventMouseOverBtn, EventMouseClickBtn }; if (itmdata != null) { switch (itmdata.type) { case itemDataType.ShapeData: // 쉐이프 선택 ShapeData shapedata = (ShapeData)itmdata; ppt.Shape shape = CustomShapeDataToShape(shapedata.Item, pc.PowerPointPresentation); ableAddBtns = new ImageButton[] { AddEnumBtn, AddFuncBtn, AddSubBtn, AddTypeBtn, EventMouseOverBtn, EventMouseClickBtn }; unableAddBtns = new ImageButton[] { }; //ppGrid.SelectedObject = shape; break; case itemDataType.SlideData: // 슬라이드 선택 SlideData slidedata = (SlideData)itmdata; ableAddBtns = new ImageButton[] { AddEnumBtn, AddFuncBtn, AddSubBtn, AddTypeBtn }; unableAddBtns = new ImageButton[] { EventMouseOverBtn, EventMouseClickBtn }; if (slidedata.IsLoaded) { break; } pb.Value = 0; pb.Minimum = 0; pb.Maximum = pc.PowerPointPresentation.Slides[slidedata.SlideIndex].Shapes.Count; Thread thr = new Thread(() => { foreach (ppt.Shape shpe in pc.PowerPointPresentation.Slides[slidedata.SlideIndex].Shapes) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { pptComponent.IsEnabled = false; var inneritm = new ImageTreeViewItem(GetResourceIcon(shpe.Type), shpe.Name + " " + MsoShapeTypeToString(shpe.Type), new ShapeData(false, ShapeToCustomShapeData(slidedata.SlideIndex, shpe))); if (shpe.Type == Microsoft.Office.Core.MsoShapeType.msoGroup) { foreach (var childitem in pc.GetShapeItem(GroupShapesToShapes(shpe.GroupItems), true)) { inneritm.Items.Add(childitem); } } pb.Value++; InfoTB.Text = $"슬라이드의 도형 정보를 읽어오는 중입니다. ({pb.Value}/{pb.Maximum})"; itm.Items.Add(inneritm); })); } Dispatcher.Invoke(new Action(() => { InfoTB.Text = $"슬라이드{slidedata.SlideIndex}의 {pb.Maximum}개의 도형 정보를 모두 읽어왔습니다. "; itmdata.IsLoaded = true; pptComponent.IsEnabled = true; pptComponent.Focus(); })); }); thr.SetApartmentState(ApartmentState.STA); thr.Start(); break; default: MessageBox.Show(itmdata.GetType().ToString()); break; } } foreach (ImageButton btn in ableAddBtns) { btn.IsEnabled = true; } foreach (ImageButton btn in unableAddBtns) { btn.IsEnabled = false; } } }