【问题标题】:Why doesn't the VSTO Word ContentControl have a Name property?为什么 VSTO Word ContentControl 没有 Name 属性?
【发布时间】:2015-02-25 08:42:25
【问题描述】:

当您add 一个 VSTO(非 Word 原生)content control 时,您指定名称:

controls.AddContentControl(wordRange, "foo", wdType);

其中 controls 是 VSTO(扩展)Document.Controls 集合。

您可以稍后通过名称look up 控件:

ContentControl myContentControl = controls["foo"];

那么为什么在世界上没有 ContentControl 的 Name 属性呢? (或 ContentControlBase,或任何其他衍生产品)。

我正在为 Document.Controls 属性实现一个包装类,它允许您添加或迭代内容控件。在迭代底层 Document.Controls 时,无法查找每个控件的名称。 (我们需要它来返回 ContentControl 包装器的实例)。所以目前我在我们的 ContentControls 包装类中这样做:

    public IEnumerator<IContentControl> GetEnumerator()
    {
        System.Collections.IEnumerator en = this.wordControls.GetEnumerator();
        while (en.MoveNext())
        {
            // VSTO Document.Controls includes all managed controls, not just 
            // VSTO ContentControls; return only those.
            if (en.Current is Microsoft.Office.Tools.Word.ContentControl)
            {
                // The control's name isn't stored with the control, only when it was added,
                // so use a placeholder name for the wrapper.
                yield return new ContentControl("Unknown", (Microsoft.Office.Tools.Word.ContentControl)en.Current);
            }
        }
    }

我宁愿不必在我们的 ContentControls 对象中保留名称到包装器对象的映射。谁能告诉我如何获取控件的名称(传递给 Controls.Add() 的名称参数?

【问题讨论】:

    标签: c# .net ms-word ms-office vsto


    【解决方案1】:

    “名称”参数纯粹是为了方便您以编程方式添加 CC,然后需要在同一 Word 实例中立即访问它。事后对 CC 的访问是通过 ContentControl.ID 属性中的 GUID 进行的。所以从这个意义上说,“名称”对于以后的访问和操作是相当无用的,因为它没有保留在 WordprocessingML 标记中。

    一种更简单的方法是完全忽略“名称”名称,添加一个 CC,获取它的 .ID,然后使用它。诚然,Guid 对人类读者来说毫无意义,但你的程序应该能够解释它。

    如果您确实需要通过有意义的名称获取 CC,例如“foo”,只需使用 .Tag 属性作为您的 CC 名称(它只需要对每个 CC 都是唯一的,尽管您的标签可以工作作为名称)并通过标签查询 ContentControlCollection。

    【讨论】:

    • 谢谢,想到了类似的东西。奇怪的是它们在 Add() 方法中需要一个名称但不保留它; name 参数应该是可选的,如果他们的文档解释了他们的推理,那就太好了。没什么大不了的——我们将使用 ID。谢谢!
    • @System.Cats.Lol:这篇文章今天刚刚发表在这个主题上 - msdn.microsoft.com/en-us/library/gg605189.aspx
    • 感谢您的链接!对于我们正在努力完成的工作,一些非常有用的信息。
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2019-04-04
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多