订阅已有的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) => {/*..*/ }; 

订阅已有的RichTextContentControl的事件

找到了!有一个非常简单的方法来访问任何类型的内容控件通过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));
    };
}
相关文章:
  • 没有找到相关文章