我有一个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);
答案 0 :(得分:1)
这些都没有经过验证,但这里有一些想法......
您可以尝试重置ActiveExplorer().Selection
以更改焦点。如果您使用的是Outlook 2010,则可以访问Explorer.ClearSelection
和Explorer.AddToSelection
。 Explorer.Activate
也可能会改变焦点 - 我没有2010年检查。
要考虑的另一个选择是隐藏消息预览窗格或切换它。请参阅Explorer.ShowPane
和Explorer.IsPaneVisible
。
唯一可能的解决方案是超越VSTO COM包装器的边界并深入到更低级别的接口。结帐IDTExtensibility2
了解较低级别的行为。
答案 1 :(得分:0)
我知道这是一个老问题,但我们也遇到了这个问题,并通过在新线程上打开这样的WPF窗口来解决它。