Я создал ленту VSTO для надстройки Outlook 2010. Когда я ранее использовал конструктор, я мог динамически изменять метку кнопки ленты. Сейчас я кодирую это вручную (XML / C #) и, похоже, не могу определить, как сделать то же самое. Элемент «метка» в XML кажется статичным.

К вашему сведению - цель этого - определить количество элементов в галерее для пользователя.

Спасибо.

4
Larry G. Wapnitsky 25 Авг 2011 в 23:44

2 ответа

Лучший ответ

Существует атрибут getLabel , который вы можете установить для своего элемента. Значение - это имя функции обратного вызова, которая вызывается для динамического предоставления имени метки. Вы можете программно обновить пользовательский интерфейс, чтобы принудительно вызывать все ваши обратные вызовы.

4
Philipp Schmid 25 Авг 2011 в 20:28

Это должно работать для Excel и Outlook с использованием C #.

Я собираюсь предположить, основываясь на вашем вопросе, что вы можете создать большую часть xml, чтобы поместить кнопку на ленту, поэтому я пропущу эту часть. Вы также не упомянули, какое событие должно изменить кнопку метки, поэтому я предполагаю, что нажатие на кнопку вызовет изменение текста метки.

Сначала вставьте xml-код кнопки на место

<button id="YourUniqueId" onAction="YourUniqueId_Click" getLabel="GetYourLabelText">

Создайте переменную уровня класса, которая будет доступна для всех методов в вашем классе ленты перед конструктором, а затем установите значение в своем конструкторе. Вам также понадобится переменная класса пользовательского интерфейса ленты. Эта переменная должна быть создана при загрузке ленты с использованием метода загрузки в xml, например onLoad = "Ribbon_Load".

public class Ribbon: Office.IRibbonExtensibility
{
    private bool _buttonClicked;
    private Office.RibbonUI ribbon;

    public Ribbon()
    {
       _buttonClicked = false;
    }

    public void Ribbon_Load(Office.IRibbonUI ribbonUI)
    {
        ribbon = ribbonUI;
    }
}

Затем в классе ленты вам понадобятся два класса «YourUniqueId_Click» и «GetYourLabelText».

public void YourUniqueId_Click(Office.IRibbonControl Control)
{
    //Since the initial value is false and presumably the user just clicked for 
    //the first (or N-th) time you'll want to set the value to true
    if(!_buttonClicked)
    {
        _buttonClicked = true;
    }
    //Or if clicking for a second (or N-th + 1) time, set the value to false
    else
    {
        _buttonClicked = false;
    }

    //Now use the invalidate method from the ribbon variable (from the load method) 
    //to reset the specific control id (in this case "YourUniqueId") from the xml. 
    //Invalidating the control will call the method "GetYourLabelText"
    ribbon.InvalidateControl(Control.Id);      
}

public string GetYourLabelText(Office.IRibbonUI Control)
{
    if(_buttonClicked)
    {
        return "Button is On";
    }
    else
    {
        return "Button is Off";
    }
}

Метод «GetYourLabelText» будет запускаться при первоначальной загрузке ленты в Outlook или Excel. Поскольку для переменной класса «_buttonClicked» в конструкторе установлено значение false, метка кнопки будет начинаться как «Button is Off». Каждый раз, когда нажимается кнопка, "_buttonClicked" меняет логическое состояние, затем кнопка сбрасывается, снова вызывая метод "GetYourLabelText".

0
Trench Scientist 10 Сен 2019 в 19:01