如何获取function区控件类上的自定义任务窗格对象
开发一个Excel vsto项目,我怎样才能处理类是一个function区控件的类中的自定义任务窗格。 例如,当我单击Ribbon控件的button时,我想显示“自定义任务窗格”。
多拉
我假设你正在使用Ribbon Visual Designer来处理Excel VSTO加载项。 您可以通过使您的自定义任务窗格通过您的加载项上的属性访问您可以实现你想要的:
public partial class ThisAddIn { private CustomTaskPane taskPane; internal CustomTaskPane TaskPane { get { return this.taskPane; } }
…并在function区中添加一个button,并为click事件添加一个事件处理程序,通过Globals访问该加载项:
private void MyRibbonButton_Click(object sender, RibbonControlEventArgs e) { Globals.ThisAddIn.TaskPane.Visible = true; }
我写了一篇文章, 描述了这个过程 ,可能会发现它很有用。 这也是可行的使用XMLfunction区。
这可以通过使用Win Forms用户控件来完成。 我已经开发了一个项目,我们必须扩展MS Word,并且需要这个function,但是同样的例子也适用于Excel。
我在网上偶然发现的另一个有趣的方式是有一个Windows用户控件,并在Windows控件中托pipe一个WPF用户控件! 这当然可以让你利用WPF获得的所有优秀的工具,下面是一个例子:
1)在function区(可视化devise器)上拖放一个切换button。这将用于显示隐藏任务窗格。 使用ToggleButton是一个不错的select,因为按下时突出显示。
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中的启动事件
private void ThisAddIn_Startup(object sender, System.EventArgs e) { AddTaskPane(); taskPaneValue.Visible = false; }
当打开MS Office应用程序时,将隐藏任务窗格切换Visible属性以在启动事件中更改此项。 导航到切换button,并按几次,以确保任务窗格按预期方式显示
也看看下面的链接我的代码大部分来自这里 – http://xamlcoder.com/cs/blogs/joe/archive/2007/07/17/using-wpf-with-vsto-office-2007。 ASPX
这是一个困难的挑战,因为function区和任务窗格是独立的实体。 其中一个主要挑战是每个检查员只有一个Ribbon类实例和任务窗格的多个实例。 为此,需要对Office内部进行一些深入的了解。
解决scheme还取决于您是使用function区XML还是function区devise器。 你使用哪种方法?