public void LoadDiagrams(string fileName) { if (string.IsNullOrWhiteSpace(fileName) || !File.Exists(fileName)) { return; } this.UnloadDiagrams(); string fileExt = IoPath.GetExtension(fileName); Cursor curCursor = this.Cursor; this.Cursor = Cursors.Wait; try { object xamlObject = null; if (string.Equals(fileExt, ".xaml", StringComparison.OrdinalIgnoreCase)) { using (XmlReader xmlReader = XmlReader.Create(new StreamReader(fileName))) { xamlObject = XamlReader.Load(xmlReader); } } else if (string.Equals(fileExt, ".zaml", StringComparison.OrdinalIgnoreCase)) { using (FileStream fileStream = File.OpenRead(fileName)) { using (GZipStream zipStream = new GZipStream(fileStream, CompressionMode.Decompress)) { xamlObject = XamlReader.Load(zipStream); } } } if (xamlObject is SvgImage) { SvgImage imageDrawing = (SvgImage)xamlObject; RenderDiagrams(imageDrawing); } else if (xamlObject is DrawingGroup) { DrawingGroup groupDrawing = (DrawingGroup)xamlObject; RenderDiagrams(groupDrawing); } } finally { this.Cursor = curCursor; } }
public void RenderDiagrams(SvgImage image) { DrawingImage drawingImage = image.Source as DrawingImage; if (drawingImage == null) { return; } DrawingGroup renderedGroup = drawingImage.Drawing as DrawingGroup; if (renderedGroup != null) { this.RenderDiagrams(renderedGroup); } }
/// <summary> /// 创建SVG图像 /// </summary> /// <param name="svgStream">SVG文件流</param> /// <returns>SVG图像</returns> public static SvgImage CreateSvgImage(Stream svgStream) { var svgImage = new SvgImage(); var drawingImage = (DrawingImage)null; var svgReader = new FileSvgReader(null); svgReader.Read(svgStream); drawingImage = new DrawingImage(svgReader.Drawing); svgImage.Source=drawingImage; svgImage.Stretch = Stretch.Fill; return svgImage; }