在 OpenXml 复选框 word2013 中设置值

cmi*_*ich 4 c# wpf checkbox openxml

所以我有一个正在通过 WPF(C#) 应用程序编辑的文档。我已成功编辑纯文本内容控件,但现在我无法选中/取消选中表单中的复选框。

我成功找到了复选框并设置了值并保存了文档,但是当我打开它时,从未在 word 文档中选中设置为 true 的复选框。

这是我用来操作复选框的代码。注意:我在标签级别访问复选框,因此 field.parent.parent

private static void SetCheckBox(OpenXmlElement field, bool isChecked)
{
    var checkBox = field.Parent.Parent.Descendants<SdtContentCheckBox>().ToList();
    foreach (var check in checkBox)
    {
        if (isChecked)
        {
            check.Checked.Val = OnOffValues.True;
        }
        else
        {
            check.Checked.Val = OnOffValues.False;
        }
        MessageBox.Show(check.Checked.Val);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在 MessageBox 中显示值时,它们显示 0/1 表示真/假。所以它们实际上是被设置的。

我这样做正确吗?

cmi*_*ich 5

因此,似乎不仅必须Checked设置复选框的值,而且必须Text更改该值。

所以我最近的代码也有一些改动,但它改变了复选框的麻烦方面。

代码:

private static void SetCheckBox(OpenXmlElement field, bool isChecked)
{
    if (isChecked)
    {
        field.Parent.Parent.FirstChild.GetFirstChild<SdtContentCheckBox>().Checked.Val = OnOffValues.True;
        field.Parent.Parent.Descendants<Run>().First().GetFirstChild<Text>().Text = "?";
    }
    else
    {
        field.Parent.Parent.FirstChild.GetFirstChild<SdtContentCheckBox>().Checked.Val = OnOffValues.False;
        field.Parent.Parent.Descendants<Run>().First().GetFirstChild<Text>().Text = "?";
    }
}
Run Code Online (Sandbox Code Playgroud)

浓缩:

private static void SetCheckBox(OpenXmlElement field, bool isChecked)
{
    field.Parent.Parent.FirstChild.GetFirstChild<SdtContentCheckBox>().Checked.Val = isChecked ? OnOffValues.True : OnOffValues.False;
    field.Parent.Parent.Descendants<Run>().First().GetFirstChild<Text>().Text = isChecked ? "?" : "?";
}
Run Code Online (Sandbox Code Playgroud)