public CanvasLayerModel(CanvasLayerEx canvasLayer)
 {
     CanvasLayer = canvasLayer ?? throw new ArgumentNullException(nameof(canvasLayer));
     CanvasLayer.IsVisibleChanged += CanvasLayer_IsVisibleChanged;
 }
Exemple #2
0
        /// <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];
            }
        }