使形状最顶级

Ale*_*dru 7 .net c# ms-word office-addins word-addins

在我的Word加载项中,我有一个Document包含特定内容的Word 对象Section.在这Section,我附加一个Shape:

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;
Run Code Online (Sandbox Code Playgroud)

我的问题是一些Word文档模板有图像或其他东西出现在我的形状之上.最初,我认为设置Z顺序足以解决这个问题:

shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)

它没.所以我的问题是,我怎样才能绝对设置我的Z顺序Shape,或者换句话说,我还需要做些什么来设置才能Shape让它成为你在文档中看到的最顶层的东西(意思是,它出现在所有其他事物之上)?

Ale*_*dru 8

我终于弄清楚为什么这些方法不起作用:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)

问题是我Shape在一个HeaderFooter部分中添加了我的对象,但显示在它上面的形状是在Document.Z排序仅与您的对象所在的同一部分内的其他形状有关(无论您的对象是在实际文档中,页眉,页脚等).

因此,而不是此代码将形状添加到特定部分:

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)

我使用这段代码直接将它添加到我的文档中,然后对它应用Z-ordering,它实际上有效.它出现在我的模板的一部分上面的所有其他对象之上:

var shape = document.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)

编写Word宏,第二版非常明确地说明了这一点:

ZOrder方法设置Shape对象相对于其他对象的z顺序.请注意,该方法不设置绝对z顺序.

因此,绝对Z顺序取决于其他因素,例如Shape在这种情况下实际存在的位置.