public CanvasLayerModel(CanvasLayerEx canvasLayer) { CanvasLayer = canvasLayer ?? throw new ArgumentNullException(nameof(canvasLayer)); CanvasLayer.IsVisibleChanged += CanvasLayer_IsVisibleChanged; }
/// <summary> /// 指定位置的文档打开并加载; /// </summary> /// <param name="fileName"></param> private void OpenDoc(string fileName) { if (string.IsNullOrEmpty(fileName)) { throw new ArgumentNullException(nameof(fileName)); } if (!File.Exists(fileName)) { throw new FileNotFoundException(); } var canvasContext = CanvasService.CanvasDataContext; canvasContext.Layers.Clear(); var layers = new List <CanvasLayerEx>(); //打开文档,遍历其中的图层元素; var xDoc = XDocument.Load(fileName); var layerElems = xDoc.Root.Elements(Constants.XElemName_Layer); foreach (var layerElem in layerElems) { var layer = new CanvasLayerEx(layerElem.Attribute(Constants.XPropName_LayerGUID)?.Value) { LayerName = layerElem.Attribute(Constants.XPropName_LayerName)?.Value }; //遍历图层内的绘制对象元素,反序列化为绘制对象后添加到图层中; foreach (var dwElem in layerElem.Elements()) { //遍历序列器; foreach (var serializer in _serializers) { try { //反序列化,直到返回结果不为空为止; var drawObject = serializer.Deserialize(dwElem); if (drawObject == null) { continue; } layer.AddDrawObject(drawObject); } catch (Exception ex) { LoggerService.WriteException(ex); } } } layers.Add(layer); } CanvasDataContext.ClearTransactions(); CanvasDataContext.Layers.AddRange(layers); if (layers.Count != 0) { CanvasDataContext.ActiveLayer = layers[0]; } }