private void MoveOutOfSvgElement(SvgSvgElement svgElm) { while (svgElm.ChildNodes.Count > 0) { oldParent.AppendChild(svgElm.ChildNodes[0]); } _patternElement.RemoveChild(svgElm); }
private DrawingGroup GetImage(WpfDrawingContext context, Rect bounds) { PrepareTargetPattern(); _renderedElement.PatternBounds = new SvgRect(bounds.X, bounds.Y, bounds.Width, bounds.Height); WpfDrawingRenderer renderer = new WpfDrawingRenderer(); renderer.Window = _renderedElement.OwnerDocument.Window as SvgWindow; // WpfDrawingSettings settings = context.Settings.Clone(); WpfDrawingSettings settings = context.Settings; bool isTextAsGeometry = settings.TextAsGeometry; settings.TextAsGeometry = true; WpfDrawingContext patternContext = new WpfDrawingContext(true, settings); patternContext.Name = "Pattern"; patternContext.Initialize(null, context.FontFamilyVisitor, null); if (_renderedElement.PatternContentUnits.AnimVal.Equals((ushort)SvgUnitType.ObjectBoundingBox)) { // svgElm.SetAttribute("viewBox", "0 0 1 1"); } else { _isUserSpace = true; } //SvgSvgElement elm = MoveIntoSvgElement(); //renderer.Render(elm, patternContext); //SvgPatternElement patternElement = _patternElement.ReferencedElement; //if (patternElement != null) //{ // if (patternElement.ReferencedElement != null) // { // _renderedElement = patternElement.ReferencedElement; // renderer.RenderAs(patternElement.ReferencedElement, patternContext); // } // else // { // _renderedElement = patternElement; // renderer.RenderAs(patternElement, patternContext); // } //} //else //{ // _renderedElement = _patternElement; // renderer.RenderAs(_patternElement, patternContext); //} renderer.RenderAs(_renderedElement, patternContext); DrawingGroup rootGroup = renderer.Drawing; //MoveOutOfSvgElement(elm); if (_renderedElement != null && _renderedElement != _patternElement) { _patternElement.RemoveChild(_renderedElement); } settings.TextAsGeometry = isTextAsGeometry; if (rootGroup.Children.Count == 1) { var childGroup = rootGroup.Children[0] as DrawingGroup; if (childGroup != null) { return(childGroup); } } return(rootGroup); }