VSTO 4 / XML: как сделать некоторые элементы управления видимыми - PullRequest
0 голосов
/ 30 августа 2018

У меня есть лента XML, созданная VSTO-4 и VS2017, работающая в Outlook-2016. Я не использую конструктор, предоставляемый Visual Studio, но весь режим «Свободный» (XML).

Эта лента, если она выполняется с помощью кнопок, и мои клиенты "немного" теряются с таким количеством кнопок / опций на одной ленте ... и большинство из них на самом деле являются просто "опциями" моей программы.

Я бы хотел сделать эту Ленту (называемую теперь Лента-1) всего тремя кнопками, одна из которых - командную кнопку «ОПЦИИ», чтобы вызвать Ленту-2, эта кнопка заполнена всеми остальными кнопками, которые у меня сейчас есть. в ленте-1.

Очевидно, что Лента-2 появится в той же вкладке Ленты-1 (как минимум «появится в той же вкладке»), и, как только пользователь установит опцию, он нажимает кнопку «НАЗАД» и Лента-2 исчезают и снова появляется Лента-1 ...

Мы можем видеть это поведение в некоторых надстройках, и я хотел бы сделать то же самое.

Есть предложения? Я ценю любой совет.

1 Ответ

0 голосов
/ 31 августа 2018

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

Обратный вызов onAction для toggleButton может установить переменную уровня класса, которую могут проверить обратные вызовы getVisible. Затем процедура делает ленту недействительной, так что обратные вызовы getVisible запускаются. Они, в свою очередь, проверяют переменную уровня класса, чтобы определить состояние видимости каждой кнопки.

Обратите внимание, что обратные вызовы get также выполняются при загрузке ленты.

Пример XML-ленты:

<group id="MyGroup" label="TEST empty" visible="true">
  <button id="testButton" label="test empty" visible="true"/>
  <toggleButton id="testToggle" label="toggle optional buttons" visible="true" onAction="toggleVisibleControls"/>
  <button id="optionalButton" label ="optional" getVisible="isVisible" />
</group>
<group id="Optional" label="Optional group" getVisible="isVisible"></group>

Пример кода VB.NET для ленты VSTO XML:

'Generated by VSTO
<Runtime.InteropServices.ComVisible(True)> _
    Public Class Ribbon1
    Implements Office.IRibbonExtensibility

    Private ribbon As Office.IRibbonUI
    Private ShowHide As Boolean = False

    Public Sub New()
    End Sub

    Public Function GetCustomUI(ByVal ribbonID As String) As String Implements Office.IRibbonExtensibility.GetCustomUI
        Return GetResourceText("VB2010addin_RibbonXML.Ribbon1.xml")
    End Function

#Region "Ribbon Callbacks"
    'Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1.
    Public Sub Ribbon_Load(ByVal ribbonUI As Office.IRibbonUI)
        Me.ribbon = ribbonUI
     End Sub

    Public Function isVisible(ByVal control As Office.IRibbonControl) As Boolean
        Return Me.ShowHide
    End Function

    Public Sub toggleVisibleControls(ByVal control As Office.IRibbonControl, pressed As Boolean)
        ShowHide = pressed
        ribbon.Invalidate()
    End Sub

#End Region
...