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

Office Add-in / Overlay Region on top of the Ribbonbar

我想为 Outlook 的功能区创建自定义选项卡。

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

我创建了一个区域并用我的自定义 WPF 控件填充它。 该区域工作正常,但问题在于:

  1. 我想在功能区中有一个自定义选项卡("MyTab")
  2. 当我单击选项卡时,我想在 Ribboncontrols 所在的位置显示我的区域,这样我的区域看起来就像一个 Ribbonbar。

Ribbonbar 的高度是固定的,您不能更改它 AFAIK。 有什么方法可以将我的区域覆盖在功能区上吗? 它是否涉及大量工作并不重要。我必须这样做,我想学习如何做。

不,您不能使用 Outlook 公开的任何 API 将区域覆盖在功能区或任何其他控件的顶部。

您可以考虑将自定义控件放在功能区栏的正下方。 VSTO(也不是 Outlook 窗体区域)不为此提供任何布局,但您可以使用 Windows API 对 Outlook windows 进行子类化。参见 Creating Adjacent Windows In Outlook for more information and sample code. Or just use Advanced Outlook view and form regions,它们提供了 TopSubpane 布局。

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

在这里和其他地方听到我想做的事情确实不可能之后,我想出了一个解决方法。我决定,如果我不能让它与我应该使用的工具一起工作,我就会即兴创作。如果其他人需要制作高度定制的功能区,这里有一个简短的解释:

  1. 使用 RibbonUI 制作一个 ribbontab。到目前为止一切顺利。
  2. 创建一个高度为 92px 的无边框对话框(使其适合 丝带内)
  3. 在该对话框上放置您想要的任何自定义控件(WPF 控件 需要在 ElementHost 内)
  4. 下载 "MouseKeyHook" NuGet 包并添加事件处理程序 鼠标点击。
  5. 找出标签的位置(使用检查器 x 和 y corrdinates) 并做一个简单的 IF 语句来检查用户是否 实际上在选项卡的边界内单击(不要忘记检查 对于 X 和 Y)。当他这样做时,只需制作一个 Dialog.Show().
  6. 使用 MouseMove 事件调整对话框的大小和位置 动态地。如果你不这样做,对话框会留在原地 当用户移动 Inspector 时。

...等等。您还必须在 min/maximizing 和关闭时处理对话框的行为。这是很多工作,但幻觉几乎是完美的。它看起来像一个真正的 Ribbontab,你可以在里面做任何你想做的事。给它一个背景图像,画一个图,打开一个浏览器.... :D