VSTO: активировать кнопку ленты только тогда, когда документ загружен - PullRequest
2 голосов
/ 19 июня 2011

Как настроить кнопку ленты в надстройке Word, чтобы она была включена, когда документ загружен, и отключена, когда документы не загружены, как и большинство встроенных кнопок?

Можно ли привязать глобальный флаг к свойству кнопки «Включено» или это сложнее? Я знаю, что мог бы создать синхронизированный цикл, который проверяет изменения в Application.Documents, но я ищу что-то более "чистое", если это возможно.

Я уже посмотрел Отключить собственную надстройку Word 2007, если документ не загружен и другие связанные вопросы.

Ответы [ 3 ]

4 голосов
/ 20 июня 2011

Есть несколько способов справиться с этим.

сначала вы можете создать открытую функцию, которая возвращает истину или ложь для включенного состояния вашей кнопки (однако вы хотите это определить), затем вы определяетеxml вашей ленты, чтобы указать на эту функцию для получателя свойства Enabled.Если вы имеете дело с надстройкой на основе IExtensibility, то вам нужно идти именно таким путем.

Если вы имеете дело с VSTO, определите кнопку ленты в конструкторе лент и сделайте ее ОТКЛЮЧЕННОЙпо умолчанию.

Затем во время события STARTUP подключите объект WORD, в частности события NEWDOCUMENT, DOCUMENTOPEN и WINDOWACTIVATE.

В коде обработчика событий для каждого из этих событий включите или отключите кнопки в зависимости от того, какое событие сработало и какой документ был активирован в то время.

3 голосов
/ 11 июля 2011

Вместо этого используйте событие DocumentChange. Подцепить будет примерно так:

Globals.ThisAddIn.Application.DocumentChange += new EventHandler(OnDocumentChange);

и обработчик

void OnDocumentChange()
{
    this.myButton.Enabled = wordApp.Documents.Count > 0;
}
2 голосов
/ 19 июня 2011

Интересно, что в моем проекте VSTO Contrib (http://vstocontrib.codeplex.com/documentation) есть некоторые функции, упрощающие управление лентами.

Самый простой способ - использовать мою фабрику лент, но необходимо будет обновить проект, чтобы отключить кнопки, если нет моделей просмотра для запроса статуса кнопки. На самом деле это сценарий, который я действительно не раскрыл.

У вас есть 3 части, которые интересует надстройка: вид (окно), контекст (документ) и лента. VSTO Contrib означает, что вы получаете модель представления для каждого контекста, и она управляет / абстрагирует ленту и представление, так что кажется, что у вас есть лента для каждого контекста, и она сообщает вам текущее активное представление (для нескольких окон, в которых отображаются одни и те же сценарии документа). Отсутствует часть, если есть лента, но нет контекстов и моделей представления, она должна аннулировать этот элемент управления ленты и отключить его. Это должно быть довольно простое изменение, напишите мне, если вы заинтересованы в том, чтобы VSTO Contrib's RibbonFactory раскрутился, и я могу сделать это изменение для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...