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 |
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。您使用哪种方法?