如何在功能区控件类上获取自定义任务窗格对象

本文关键字:任务 自定义 对象 获取 功能区 控件 | 更新日期: 2023-09-27 18:13:00

开发一个Excel vsto项目,我如何处理类中的自定义任务窗格,这是一个Ribbon控件。例如,当我单击Ribbon Control的按钮时,我想显示自定义任务窗格。

朵拉

如何在功能区控件类上获取自定义任务窗格对象

我假设您正在使用Excel VSTO加载项,使用Ribbon可视化设计器。您可以通过外接程序

上的属性使自定义任务窗格可访问,从而实现您想要的目标:
public partial class ThisAddIn
{
   private CustomTaskPane taskPane; 
   internal CustomTaskPane TaskPane
   {
      get
      {
         return this.taskPane;
      }
   }

…并在Ribbon中添加一个按钮,并为click事件添加一个事件处理程序,通过Globals:

访问加载项。
private void MyRibbonButton_Click(object sender, RibbonControlEventArgs e)
{
   Globals.ThisAddIn.TaskPane.Visible = true;
}

我写了一篇帖子描述了这个过程,你可能会发现它很有用。使用xml功能区也是可行的。

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

我在网上偶然发现的另一种有趣的方法是在Windows控件中有一个Windows用户控件和一个WPF用户控件!这当然可以让你利用WPF的所有强大的工具,这里有一个例子:

1)在Ribbon(Visual Designer)上放置ToggleButton。这将用于显示隐藏任务窗格。使用ToggleButton是一个很好的选择,因为当按下时它会突出显示。

2)将以下代码添加到ToggleButton的click事件

 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)用户控件(name - taskpanecontrol)

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

在复制/粘贴下面的代码时,使用我所使用的名称会有所帮助,但如果你想改变它,无论如何

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

这是一个困难的挑战,因为功能区和任务窗格是独立的实体。其中一个主要的挑战是,每个检查器只有一个Ribbon类实例和多个任务窗格实例。要正确地做到这一点,需要对Office内部有一些深入的了解。

解决方案还取决于您使用的是Ribbon XML还是Ribbon Designer。您使用的是哪种方法?