功能区顶部的Office加载项/覆盖区域

时间:2016-02-01 19:34:33

标签: c# vb.net vsto outlook-addin ribbon

我想为Outlook的Ribbonbar创建一个自定义标签。

我立刻放弃了用标准控件创建一个真正的Ribbonbar的想法,因为我知道它受到严重限制。没有自定义控件,几乎没有其他项目中可用于相同控件的众所周知的事件,在功能区内不可能有不同的设计或布局等。

我创建了一个Region并用我的自定义WPF控件填充它。 该地区运作良好,但问题在于:

  1. 我想在功能区中有一个自定义标签(" MyTab")
  2. 当我点击Tab时,我想显示我所在的区域,其中的RibbonControls就是这样,看起来我的Region是一个Ribbonbar。
  3. Ribbonbar的高度是固定的,您无法更改它AFAIK。 有没有办法将我的区域覆盖在Ribbonbar上? 如果涉及大量工作并不重要。我必须这样做,我想学习如何。

3 个答案:

答案 0 :(得分:1)

您可以考虑将自定义控件放在功能区栏下方。 VSTO(也不是Outlook表单区域)不提供任何布局,但您可以使用Windows API对Outlook窗口进行子类化。有关详细信息和示例代码,请参阅Creating Adjacent Windows In Outlook。或者只使用Advanced Outlook view and form regions,它们提供TopSubpane布局。

Fluent UI提供了一组预定义的控件,并且不允许使用功能区本身执行任何操作。在以下系列文章中阅读有关Ribbon UI的更多信息:

答案 1 :(得分:0)

不可以,您无法使用Outlook公开的任何API在功能区或任何其他控件上覆盖区域。

答案 2 :(得分:0)

在这里和其他地方听到我想要做的事实上是不可能的,我想出了一个解决方法。我决定如果我不能使用我应该使用的工具,我只是即兴发挥。以下是其他人需要制作高度自定义的Ribbonbar的简短说明:

  1. 使用RibbonUI创建一个ribbontab。到目前为止一切顺利。
  2. 创建一个高度为92px的无边框对话框(以便它适合 在丝带里面)
  3. 在该对话框中放置您想要的任何自定义控件(WPF控件 需要在ElementHost内部)
  4. 下载" MouseKeyHook" NuGet包并添加事件处理程序 鼠标点击。
  5. 找出标签的位置(使用Inspector x和y corrdinates)并做一个简单的IF语句来检查用户 实际上是在标签边界内点击(不要忘记检查 对于X和Y)。当他这样做时,只需制作一个Dialog.Show()。
  6. 使用MouseMove事件调整大小并重新定位对话框 动态。如果你不这样做,对话就会保持不变 当用户移动检查器时。
  7. ......等等。最小/最大化和关闭时,您还必须处理对话框的行为。它做了很多工作,但幻觉几乎是完美的。它看起来像一个真正的Ribbontab,你可以在它里面做任何你想做的事情。给它一个背景图像,绘制图形,打开浏览器......:D