繁体   English   中英

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

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

我想为Outlook的Ribbonbar创建一个自定义选项卡。

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

我创建了一个Region,并用我的自定义WPF控件填充了它。 该区域运行良好,但这是问题所在:

  1. 我想在功能区中有一个自定义标签(“ MyTab”)
  2. 当我单击选项卡时,我想显示功能区控件所在的区域,以使我的区域看起来像一个功能区栏。

功能区栏的高度是固定的,您无法自动更改它。 有什么办法可以将我的区域覆盖在功能区栏的顶部? 涉及很多工作都没关系。 我必须这样做,我想学习如何。

您可以考虑将自定义控件放在功能区栏的正下方。 VSTO(也不是Outlook窗体区域)没有为此提供任何布局,但是您可以使用Windows API来对Outlook窗口进行子类化。 有关更多信息和示例代码,请参阅在Outlook中创建相邻的Windows 或者只使用Advanced Outlook视图和窗体区域 ,它们提供TopSubpane布局。

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

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

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

  1. 使用RibbonUI创建一个Ribbontab。 到现在为止还挺好。
  2. 创建一个高度为92px的无边界对话框(以使其适合功能区内部)
  3. 将所需的任何自定义控件放在该对话框上(WPF控件需要位于ElementHost内)
  4. 下载“ MouseKeyHook” NuGet程序包,并为MouseClick添加事件处理程序。
  5. 找出选项卡的位置(使用Inspector x和y关联),并做一个简单的IF语句,检查用户是否实际上在选项卡的边界内单击(不要忘记检查X和Y)。 当他这样做时,只需创建一个Dialog.Show()。
  6. 使用MouseMove事件可动态调整对话框的大小并重新放置对话框。 如果您不这样做,则当用户移动检查器时,对话框将保留在原处。

...等等。 最小/最大化和关闭时,您还必须处理对话框的行为。 大量的工作,但幻觉几乎是完美的。 它看起来像一个真正的Ribbontab,您可以在其中执行任何操作。 给它一个背景图像,画一个图,打开浏览器....:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM