所以我有一个我正在通过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);
}
}
当我在MessageBox中显示值时,它们显示0/1表示true / false。所以他们实际上已经确定了。
我这样做了吗?
答案 0 :(得分:3)
因此,似乎不仅必须设置复选框的Checked
值,而且必须更改Text
值。
所以我最近的代码也有一些改动,但它改变了复选框的麻烦。
<强> CODE:强>
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 = "☐";
}
}
<强>者浓缩强>
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 ? "☒" : "☐";
}
答案 1 :(得分:1)
解决此问题的另一个代码版本:
private void ResetFile(string filePath)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
{
try
{
string uncheckValue = "☐";
string checkValue = "☒";
foreach (SdtContentCheckBox ctrl in doc.MainDocumentPart.Document.Body.Descendants<SdtContentCheckBox>())
{
if (ctrl.Checked.Val == OnOffValues.One)
{
ctrl.Checked.Val = OnOffValues.Zero;
if (ctrl.Parent.Parent.Descendants<SdtContentRun>().ToList().Count > 0)
{
SdtContentRun text = (SdtContentRun)ctrl.Parent.Parent.Descendants<SdtContentRun>().ToList()[0];
text.InnerXml = text.InnerXml.Replace(checkValue, uncheckValue);
}
}
}
doc.MainDocumentPart.Document.Save();
}
catch { }
}
}