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

How to get the Custom Task Pane Object on the Ribbon control Class

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

朵拉


我假设您正在使用Ribbon Visual Designer处理Excel VSTO加载项。您可以通过外接程序上的属性来访问自定义任务窗格,从而实现所需的目标:

1
2
3
4
5
6
7
8
9
10
public partial class ThisAddIn
{
   private CustomTaskPane taskPane;
   internal CustomTaskPane TaskPane
   {
      get
      {
         return this.taskPane;
      }
   }

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

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

我不久前写了一篇帖子,描述了该过程,您可能会发现它很有用。
使用xml功能区也是可行的。


这可以通过具有Win Forms用户控件来完成。
我已经在一个必须扩展MS Word并需要此功能的项目中工作,但是同一示例将适用于Excel。

我在网上偶然发现的另一种有趣的方式是拥有Windows用户控件并在Windows控件中托管WPF用户控件!
这当然使您可以利用WPF提供的所有出色工具,下面是一个示例:

1)将ToggleButton拖放到功能区(Visual Designer)上。这将用于显示隐藏任务窗格。
使用ToggleButton是一个不错的选择,因为按下时它会突出显示。

2)将以下代码添加到ToggleButton

的click事件中

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

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

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

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

5)添加两个用户控件

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

5.2)用户控件(WPF),(名称-con)

使用我使用的名称在复制/粘贴下面的代码时会有所帮助,但是如果您希望

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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事件中

1
2
3
4
5
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。您使用哪种方法?