订阅现有 RichTextContentControl 的事件
Subscribe to events of an existing RichTextContentControl
我正在尝试访问现有 .docx 文档的所有 Rich-Text-Content-Controls (Office Open XML)。
我找到了一种通过在指定范围内循环来获取文档的所有内容控件的方法:
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);
}
但我找不到将这些 ContentControls(程序集:Microsoft.Office.Interop.Word
)转换为 RichTextContentControls 的方法(汇编:Microsoft.Office.Tools.Word
)。
RichTextContentControl richTextContentControl = contentControl as RichTextContentControl;
throws Exception
我想执行此转换,因为我需要订阅 RichTextContentControl 的 entering 和 exiting 事件。
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));
};
}
我正在尝试访问现有 .docx 文档的所有 Rich-Text-Content-Controls (Office Open XML)。
我找到了一种通过在指定范围内循环来获取文档的所有内容控件的方法:
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);
}
但我找不到将这些 ContentControls(程序集:Microsoft.Office.Interop.Word
)转换为 RichTextContentControls 的方法(汇编:Microsoft.Office.Tools.Word
)。
RichTextContentControl richTextContentControl = contentControl as RichTextContentControl;
throws Exception
我想执行此转换,因为我需要订阅 RichTextContentControl 的 entering 和 exiting 事件。
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));
};
}