【问题标题】:How to get the Custom Task Pane Object on the Ribbon control Class如何获取功能区控件类上的自定义任务窗格对象
【发布时间】:2011-11-22 15:17:58
【问题描述】:

开发 Excel vsto 项目,我如何处理作为功能区控件的类中的自定义任务窗格。 例如,我想在单击功能区控件的按钮时显示自定义任务窗格。

朵拉

【问题讨论】:

    标签: c# excel vsto ribbon customtaskpane


    【解决方案1】:

    我假设您正在使用 Excel VSTO 加载项和功能区可视化设计器。您可以通过加载项上的属性访问自定义任务窗格来实现您想要的:

    public partial class ThisAddIn
    {
       private CustomTaskPane taskPane; 
       internal CustomTaskPane TaskPane
       {
          get
          {
             return this.taskPane;
          }
       }
    

    ...并在您的功能区中添加一个按钮,并为单击事件添加一个事件处理程序,通过 Globals 访问加载项:

    private void MyRibbonButton_Click(object sender, RibbonControlEventArgs e)
    {
       Globals.ThisAddIn.TaskPane.Visible = true;
    }
    

    我不久前写了一篇 describes the process 的帖子,您可能会发现它很有用。 使用 xml 功能区也是可行的。

    【讨论】:

      【解决方案2】:

      这可以通过使用 Win Forms 用户控件来实现。 我曾参与过一个项目,我们必须扩展 MS Word 并需要此功能,但同样的示例也适用于 Excel。

      我在网上偶然发现的另一种有趣的方法是拥有一个 Windows 用户控件并在 Windows 控件中托管一个 WPF 用户控件! 这当然可以让您利用 WPF 获得的所有很棒的工具,这里是一个示例:

      1) 在功能区上放置一个切换按钮(可视化设计器)。这将用于显示隐藏任务窗格。 使用 ToggleButton 是一个不错的选择,因为它在按下时会突出显示。

      2)在ToggleButton的点击事件中添加如下代码

       Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked;
      

      3)将项目中的引用添加到以下程序集 - WindowsFormsIntegration

      4)在您的 ThisAddIn.cs 中添加下面列出的两个 using 指令:

         using Microsoft.Office.Tools;
         using System.Windows.Forms.Integration;
      

      5)添加两个用户控件

      5.1)用户控件(名称-taskPaneControl1)

      5.2)用户控制(WPF),(name - con)

      在复制/粘贴下面的代码时使用我使用的名称会有所帮助,但如果您愿意,可以通过任何方式更改它

      6)将以下代码添加到 ThisAddIn.cs

      public CustomTaskPane TaskPane
      {
          get{return taskPaneValue;}
      }
      
      private TaskPaneControl taskPaneControl1;
      private CustomTaskPane taskPaneValue;
      private WpfControl con;
      
      internal void AddTaskPane()
      {
          ElementHost host = new ElementHost();
          con = new WpfControl();
          host.Child = con;
          host.Dock = DockStyle.Fill;
          taskPaneControl1 = new TaskPaneControl();
          taskPaneControl1.Controls.Add(host);
          taskPaneValue = this.CustomTaskPanes.Add(taskPaneControl1, "My Taskpane");
          taskPaneValue.Visible = true;
      }
      

      6) 将以下两个代码添加到您的 ThisAddIn.cs

      中的 Startup 事件中
      private void ThisAddIn_Startup(object sender, System.EventArgs e)
      {
      AddTaskPane();
      taskPaneValue.Visible = false;
      }
      

      当打开 MS Office 应用程序时,任务窗格将被隐藏切换可见属性以在启动事件中更改此设置。 导航到 ToggleButton 并按几次以确保任务窗格按预期显示

      还可以查看以下链接,我的大部分代码都来自这里 - http://xamlcoder.com/cs/blogs/joe/archive/2007/07/17/using-wpf-with-vsto-office-2007.aspx

      【讨论】:

        【解决方案3】:

        这是一项艰巨的挑战,因为功能区和任务窗格是独立的实体。主要挑战之一是每个检查器只有一个 Ribbon 类实例和多个任务窗格实例。为此,需要对 Office 内部有一些深入的了解。

        解决方案还取决于您使用的是功能区 XML 还是功能区设计器。您使用的是哪种方法?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-01
          • 1970-01-01
          相关资源
          最近更新 更多