public ContentControl Clone()
        {
            if (!(SdtElement.CloneNode(true) is SdtElement clonedElement))
            {
                return(null);
            }

            SdtElement.InsertBeforeSelf(clonedElement);
            var cloned = new ContentControl(clonedElement, IsDescendantOfAContentControl, TemplateDocument);

            TemplateDocument.AddControl(cloned, IsFirstOrder);
            cloned.GenerateDescendantsFromChildren();
            cloned.Parent = Parent;
            return(cloned);
        }
        internal static WordprocessingDocument RemoveSdtBlocks(this WordprocessingDocument doc, IEnumerable <string> contentBlocks)
        {
            List <SdtElement> SdtBlocks = doc.MainDocumentPart.Document.Descendants <SdtElement>().ToList();

            if (contentBlocks == null)
            {
                return(doc);
            }

            foreach (var s in contentBlocks)
            {
                SdtElement currentElement = SdtBlocks.FirstOrDefault(sdt => sdt.SdtProperties.GetFirstChild <Tag>()?.Val == s);
                if (currentElement == null)
                {
                    continue;
                }
                IEnumerable <OpenXmlElement> elements = null;

                if (currentElement is SdtBlock)
                {
                    elements = (currentElement as SdtBlock).SdtContentBlock.Elements();
                }
                else if (currentElement is SdtCell)
                {
                    elements = (currentElement as SdtCell).SdtContentCell.Elements();
                }
                else if (currentElement is SdtRun)
                {
                    elements = (currentElement as SdtRun).SdtContentRun.Elements();
                }

                foreach (var el in elements)
                {
                    currentElement.InsertBeforeSelf(el.CloneNode(true));
                }
                currentElement.Remove();
            }
            return(doc);
        }