2016-06-17 2 views
-2

Я не могу добавить элементы в выпадающий контроллер во время выполнения в классе ленты. Однако, похоже, что многие темы и даже msdn разрешают его с помощью свойств класса Globals.Невозможно добавить элемент в раскрывающийся список во время выполнения

https://msdn.microsoft.com/en-us/library/bb772088.aspx

firt пример на этой странице MSDN не работает для меня. Я не могу добраться до dropDown или любого другого контроллера (кнопка, comboBox и т. Д.).

Вот мой XML-файл:

<?xml version="1.0" encoding="utf-8" ?> 
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" > 
<ribbon> 
    <tabs> 
    <tab id="LFET" label="LFET(new)"> 
    <group id="Data" label="Data"> 
    <dropDown id="DropdownList" label="Dropdownlist1" visible="true"> 
    </dropDown> 
    </group> 
    </tab> 
    </tabs> 
</ribbon> 
</customUI> 

И .cs, где я пытаюсь получить доступ к элементу DropDown:

namespace TEST 
{ 
    [ComVisible(true)] 
    public class TESTRibbon : Office.IRibbonExtensibility 
    { 
     private Office.IRibbonUI ribbon; 

     public void DropdownList() 
     { 
      //No way to access my custom ribbon like that. 
      Globals.Ribbons.Ribbon.Dropdownlist1.Items.Add(); 
     } 
    } 
} 

С уважением,

+2

Подход отличается в зависимости от того, используется ли RibbonXML или VSTO Ribbon Designer - эти два нельзя смешивать. Для XML ленты нужны «обратные вызовы» (такие же, как для VBA, например) в файле Ribbon.cs. Если вы используете Ribbon Designer, то VSTO устанавливает обратные вызовы в фоновом режиме, и вы можете использовать подход 'public void DropdownList()', который вы показываете в своем коде. В документации VSTO отправной точкой является https://msdn.microsoft.com/en-us/library/aa942866.aspx. Это содержит ссылки на 3 части статьи по настройке ленты, которая предоставляет остальную часть того, что вам нужно. –

ответ

1

Я знаю, что я У меня были проблемы с манипуляцией лентой напрямую. Одна вещь может решить это: Invalidate лента.

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

<dropDown id="mycustomid" showLabel="false" onAction="onAction" getSelectedItemIndex="getSelected" 
      getItemCount="getCount" getItemID="getID" getItemLabel="getLabel" getEnabled="getEnabled" 
      screentip="whatever" supertip="whatever" /> 


public void onAction(IRibbonControl control, string id, int index) 
{ 
} 

public int getSelected(IRibbonControl control) 
{ 
} 

public int getCount(IRibbonControl control) 
{ 
} 

public string getID(IRibbonControl control, int index) 
{ 
} 

public string getLabel(IRibbonControl control, int index) 
{ 
} 
+0

Вы просто НЕ МОЖЕТЕ манипулировать лентой напрямую. XML запрашивается Office только ONCE при запуске. О каких проблемах вы говорите? Динамические обратные вызовы - единственный способ. – Nikolay

+0

Это именно то, что я имею в виду - я никогда не мог этого сделать, но в этой статье речь идет о том, как это сделать. – Chris

Смежные вопросы