Когда вы добавляете VSTO (не Word родной) контроль содержимого , вы указываете имя:
controls.AddContentControl(wordRange, "foo", wdType);
Где элементы управления - VSTO (расширенный)Коллекция Document.Controls.
Позже вы можете найти элемент управления по имени:
ContentControl myContentControl = controls["foo"];
Так почему же в мире нет свойства Name для ContentControl?(или 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 ()?