0

我发现可以将自定义任务窗格添加到单个窗口,例如使用此代码段的约会:

    public void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
{
    Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane;

    if(Inspector.CurrentItem is  Microsoft.Office.Interop.Outlook.AppointmentItem ) {

        UserControl uc1 = MyUserControl();
        myCustomTaskPane = getAddIn().CustomTaskPanes.Add(uc1, "MyPanel",Inspector);
        myCustomTaskPane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight;
        myCustomTaskPane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
        myCustomTaskPane.Visible = true;

    }

    //Additionally You can add a property change listener to the current Item here
}

但是,我使用“NetOffice”而不是 VSTO 来使插件与各种 Outlook 版本兼容。并且加载项没有该CustomTaskPanes属性,并且该TaskPanes.Add属性没有重载以允许在主资源管理器之外的其他窗口上添加自定义窗格。

4

1 回答 1

1

好的,按照以下方式解决。在ComAddin课堂上我有一个局部变量

    Office._CustomTaskPane _taskPane;

我在覆盖CTPFactoryAvailable方法上设置变量:

    public override void CTPFactoryAvailable(object CTPFactoryInst)
    {
            _ctpFactory = new NetOffice.OfficeApi.ICTPFactory(this.Application, CTPFactoryInst);
    }

然后 - 加载插件时 - 我正在向事件添加事件处理程序NewInspectorEvent

    private void Addin_OnStartupComplete(ref Array custom)
    {
        var inspectors = Application.Inspectors as NetOffice.OutlookApi.Inspectors;
        inspectors.NewInspectorEvent += Inspectors_NewInspectorEvent;
    }

在用于创建新检查器窗口的事件处理程序中,我正在创建窗格:

    private void Inspectors_NewInspectorEvent(_Inspector Inspector)
    {
        var ai = Inspector.CurrentItem as AppointmentItem;
        if (ai == null)
            return;
        var ins = Inspector as NetOffice.OutlookApi.Inspector;
        _taskPane = _ctpFactory.CreateCTP(typeof(Addin).Assembly.GetName().Name + ".UserControl1", "My title", Inspector);
        _taskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionTop;
        _taskPane.Height = 50;
        _taskPane.Visible = true;
    }

这个概念证明草案对我有用。

于 2015-12-02T14:41:45.867 回答