VSTO Outlook加载项中的WPF表单 - 数据输入问题

时间:2012-03-26 11:11:41

标签: wpf outlook vsto add-in

我有一个VSTO(.net 4)Outlook加载项,用于打开WPF表单。

表单上有许多控件,包括2个文本框。

如果我在电子邮件浏览器中选择了一个电子邮件(有焦点)后打开表单,那么一切都按预期工作。

...然而

如果我在通过点击电子邮件正文(即邮件本身)给出任何电子邮件焦点时打开表单,那么表单上的文本框将不接受空格键或键组合,例如Ctrl + C,Ctrl + V。 例如,如果点击Space,则Outlook(在后台)循环到下一封电子邮件。

事实证明这是一个已知问题,但我想一个解决方法,我可以在我打开表单之前将电子邮件资源管理器设置为焦点。

有谁知道我该怎么做?

解决方案

好的,多亏了SliverNinja我已经设法解决了这个问题,它确实使预览窗格中选定的电子邮件消失然后重新出现,但它对我来说已经足够了......

var app = new Microsoft.Office.Interop.Outlook.Application();
var activeExplorer = app.ActiveExplorer();

var previewPaneVisibility = activeExplorer.IsPaneVisible(OlPane.olPreview);
activeExplorer.ShowPane(OlPane.olPreview, false);
activeExplorer.ShowPane(OlPane.olPreview, previewPaneVisibility);

2 个答案:

答案 0 :(得分:1)

这些都没有经过验证,但这里有一些想法......

您可以尝试重置ActiveExplorer().Selection以更改焦点。如果您使用的是Outlook 2010,则可以访问Explorer.ClearSelectionExplorer.AddToSelectionExplorer.Activate也可能会改变焦点 - 我没有2010年检查。

要考虑的另一个选择是隐藏消息预览窗格或切换它。请参阅Explorer.ShowPaneExplorer.IsPaneVisible

唯一可能的解决方案是超越VSTO COM包装器的边界并深入到更低级别的接口。结帐IDTExtensibility2了解较低级别的行为。

答案 1 :(得分:0)

我知道这是一个老问题,但我们也遇到了这个问题,并通过在新线程上打开这样的WPF窗口来解决它。