订阅已有的RichTextContentControl的事件
本文关键字:RichTextContentControl 事件 | 更新日期: 2023-09-27 18:06:02
我试图访问现有.docx文档(Office Open XML)的所有Rich-Text-Content-Controls。
我找到了一种方法,通过在指定范围内循环来获得文档的所有内容控件:
var contentControls = new List<ContentControl>();
Range rangeStory;
foreach (Range range in wordDocument.StoryRanges)
{
rangeStory = range;
do
{
try
{
contentControls.AddRange(rangeStory.ContentControls.Cast<ContentControl>());
}
catch (COMException) { }
rangeStory = rangeStory.NextStoryRange;
}
while (rangeStory != null);
}
但是我找不到一种方法来cast这些ContentControls (assembly: Microsoft.Office.Interop.Word
)到RichTextContentControls (assembly: Microsoft.Office.Tools.Word
)。
RichTextContentControl richTextContentControl = contentControl as RichTextContentControl;
throws Exception
我想做这个铸造,因为我需要订阅RichTextContentControl的进入和退出事件。
richTextContentControl.Entering += (sender, args) => {/*..*/ };
richTextContentControl.Exiting += (sender, args) => {/*..*/ };
找到了!有一个非常简单的方法来访问任何类型的内容控件通过Vsto:
foreach (var result in thisDocument.Controls.OfType<RichTextContentControl>())
{
result.Entering += (sender, args) =>
{
MediatorContext.Current.Send(new CurrentKomponenteChangedRequest(result.ID, State.Entering));
};
result.Exiting += (sender, args) =>
{
MediatorContext.Current.Send(new CurrentKomponenteChangedRequest(result.ID, State.Exiting));
};
}