Взаимодействуя с файлами и каталогами на надстройке VSTO Слово в Ribbon.cs

голоса
0

Пожалуйста помоги. Дело в том, что мне нужно, это довольно просто. Мне нужно меню из файлов и папок. Если я нажимаю папку (имя), то меню расширяется, и я получаю список из этой папки и так далее. Я пытался использовать DropDown и я могу получить там имена файлов или / и папок. Но если я буду нажимать на пункт, выпадающий список сбросит. (Это не то, что мне нужно)

//dropDown lable is: combo
 DirectoryInfo obj = new DirectoryInfo(@C:\install\);//
            DirectoryInfo[] folders = obj.GetDirectories();
            var filtered = folders.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden));
            string str = ;
            RibbonDropDownItem ddItem0 = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();

            ddItem0.Label = ${str};
            combo.Items.Clear();
            foreach (DirectoryInfo file in filtered)
            {
                str = file.Name;

                RibbonDropDownItem ddItem1 = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
                ddItem1.Label = $Kaust:{str};
                combo.Items.Add(ddItem1);

Maby мне нужно использовать меню вместо DropDown? Но как я могу это сделать? Коротко: у меня есть папка. Существуют файлы и папки внутри. Мне нужна «кнопка» ленты выбрать файлы и открывать папки внутри этой «кнопки».

Задан 09/10/2019 в 12:58
источник пользователем
На других языках...                            


1 ответов

голоса
0

Лента UI является статическим , что с момента ее рождения. Единственные возможные динамические изменения могут быть реализованы с помощью ленты обратных вызовов. К сожалению, дизайнер лент доступен в VSTO надстройки не обеспечивает все возможности пользовательского интерфейса Fluent, так что вы должны переключиться с использованием сырой XML - разметки с указанием обратных вызовов, которые заинтересованы в См. Пошаговое руководство: Создание настраиваемой вкладки с помощью XML ленты для начала быстро. Обратите внимание, что вы можете экспортировать существующий пользовательский интерфейс в файл XML ленты.

Свободный пользовательский интерфейс (так называемый ленточный интерфейс) описан в глубине в следующей серии статей:

Чтобы обновить пользовательский интерфейс необходимо использовать IRibbonUI.Invalidate и IRibbonUI.InvalidateControl методу, позволяющие утратившую силу кэшированных значений для всех элементов управления (или только указанные один) пользовательского интерфейса Ribbon. Таким образом, когда элемент выбран в одном элементе управления вы можете заставить другие элементы управления , чтобы обновить свое состояние и содержание.

В принципе, вызов Invalidateили InvalidateControlметод , вы можете заставить ваши ленты обратного вызова , которая будет вызвана заново. Например, если надстройка автор реализует getImageпроцедуру обратного вызова для кнопки, функция вызывается один раз, изображение загружается, а затем , если изображение должно быть обновлено, кэшированные изображение используется вместо ссылаясь на процедуру. Этот процесс остается на месте для управления до дополнительных встраиваемых сигналов , что кэшированные значения являются недействительными с помощью InvalidateControlметода, при котором время, процедура обратного вызова снова вызываются и возврат ответа в кэше.

Dim MyRibbon As IRibbonUI
Sub MyAddInInitialize(Ribbon As IRibbonUI)
    Set MyRibbon = Ribbon
End Sub
Sub myFunction()
‘ Invalidates the caches of all of this add-in’s controls
MyRibbon.Invalidate()

End Sub

Кроме того , вы можете найти dynamicMenuконтроль полезный , поскольку она обеспечивает функцию getContentобратного вызова , которая получает строку XML , который содержит содержимое этого динамического меню.

Ответил 09/10/2019 в 14:43
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more