Найдите элемент управления флажком Word по его свойству Tag с помощью Open XML SDK

У меня есть документ Word 2013, содержащий элемент управления флажком. Я установил для свойства Tag этого флажка значение fooCheckBox:

Снимок экрана со свойствами флажка Word 2013

Теперь я хотел бы программно найти и управлять этим конкретным флажком с помощью Open XML SDK 2.5. Я знаю, как найти/перечислить флажки, но я не знаю, как найти конкретное SdtContentCheckBox по его свойству Tag:

Имея WordprocessingDocument doc, как я могу получить определенные SdtContentCheckBox по их свойству Tag?

(У меня есть рабочий код, который я публикую как ответ (см. ниже). Однако я понятия не имею, это правильный способ сделать это; поэтому, если кто-то знает лучший, более правильный способ, я хотел бы посмотреть, как это делается.)


person stakx - no longer contributing    schedule 15.06.2015    source источник


Ответы (1)


По-видимому, свойство .Parent объекта SdtContentCheckBox ссылается на коллекцию SdtProperty, которую можно запросить для потомка Tag.

Я не понимаю логики этого объектного моделирования, но его можно использовать для выполнения работы:

// using DocumentFormat.OpenXml.Packaging;
// using System.Diagnostics;
// using System.Linq;

SdtContentCheckBox TryGetCheckBoxByTag(WordprocessingDocument doc, string tag)
{
    foreach (var checkBox in doc.MainDocumentPart.Document.Descendants<SdtContentCheckBox>())
    {
        var tagProperty = checkBox.Parent.Descendants<Tag>().FirstOrDefault();
        if (tagProperty != null)
        {
            Debug.Assert(tagProperty.Val != null);
            if (tagProperty.Val.Value == tag)
            {
                // a checkbox with the given tag property was found
                return checkBox;
            }
        }
    }
    // no checkbox with the given tag property was found
    return null;
}
person stakx - no longer contributing    schedule 15.06.2015