2

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

朵拉

4

3 回答 3

6

我假设您正在使用带有功能区可视化设计器的 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;
}

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

于 2011-11-06T01:44:13.053 回答
3

这可以通过使用 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),(名称 - 骗局)

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

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 应用程序打开时,任务窗格将被隐藏切换 Visible 属性以在 Startup 事件中更改它。导航到 ToggleButton 并按几次以确保任务窗格按预期显示

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

于 2011-11-22T07:02:03.423 回答
0

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

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

于 2011-11-02T15:32:30.183 回答