【问题标题】:Interacting with files and directories on VSTO Word addin in Ribbon.cs在 Ribbon.cs 中与 VSTO Word 插件上的文件和目录进行交互
【发布时间】:2019-10-09 09:58:02
【问题描述】:

请帮忙。我需要的东西很简单。我需要一个来自文件和文件夹的菜单。如果我按下文件夹(名称),则菜单会展开,我会从该文件夹中获取列表,依此类推。我尝试使用 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);

也许我需要使用菜单而不是下拉菜单?但我该怎么做呢? 很快:我有一个文件夹。里面有文件和文件夹。我需要一个功能区“按钮”来选择文件并打开此“按钮”内的文件夹。

【问题讨论】:

    标签: c# ms-word vsto interop office-addins


    【解决方案1】:

    功能区 UI 从一开始就是静态的。唯一可能的动态更改可以通过使用功能区回调来实现。不幸的是,VSTO 插件中可用的功能区设计器并未提供 Fluent UI 的所有功能,因此您必须切换到使用原始 XML 标记来指定您感兴趣的回调。请参阅 Walkthrough: Create a custom tab by using Ribbon XML 以快速入门。请注意,您可以将现有的自定义 UI 导出到功能区 XML 文件。

    Fluent UI(又名 Ribbon UI)在以下系列文章中进行了深入描述:

    要刷新您的自定义 UI,您需要使用 IRibbonUI.InvalidateIRibbonUI.InvalidateControl 方法,这些方法允许使功能区用户界面的所有控件(或仅指定一个)的缓存值无效。因此,当在一个控件中选择项目时,您可能会强制其他控件更新其状态和内容。

    基本上,调用InvalidateInvalidateControl 方法可能会强制重新调用功能区回调。例如,如果加载项编写器为按钮实现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 字符串。

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 2015-03-17
      • 2015-04-13
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多