Center Outlook WPF加载项

时间:2011-01-21 23:41:05

标签: wpf outlook vsto

我使用WPF为Outlook创建了一个加载项。一切都正常,除了“耀斑”。当WPF窗口打开时,它不在Outlook窗体的中心,它在屏幕上打开。我将WindowStartLocation设置为CenterOwner,但这似乎没有做到这一点。

3 个答案:

答案 0 :(得分:2)

我的解决方案,在Cory的指导下:

var sendToPulse = new Pulse_Outlook_Presentation.SendToPulse ();
var interopApplication = Globals.ThisAddIn.Application;

var x = (interopApplication.ActiveWindow ().Left + interopApplication.ActiveWindow ().Width / 2) - (sendToPulse.Width / 2);
var y = (interopApplication.ActiveWindow ().Top + interopApplication.ActiveWindow ().Height / 2) - (sendToPulse.Height / 2);

OutlookWin32Window parentWindow = new OutlookWin32Window (Globals.ThisAddIn.Application.ActiveWindow ());

sendToPulse.Left = x;
sendToPulse.Top = y;

答案 1 :(得分:0)

您应该能够获得对当前Outlook实例的引用,访问该实例的Application对象并获取Window大小和位置(Left,Top)并进行一些数学计算以获得窗口的定位。

类似于:

Dim interopApplication As Outlook.Application = _
    Me.ActiveExplorer().Application

With interopApplication.ActiveWindow
    Dim _left = Me.Width - (.Width / 2)
    Dim _top = Me.Height - (.Height / 2)
End With

这假设Outlook窗口位于第一个监视器上并且已最大化。必须编写更多逻辑来处理其他突发事件

答案 2 :(得分:0)

以最简单的形式寻找VBA答案,其中应用程序是主机,而我是当前表单的快捷方式。

Private Sub UserForm_Initialize()
   ProgressFrame.Caption = ""
   Me.Left = Application.ActiveWindow().Left + Application.ActiveWindow().Width / 2 - (Me.Width / 2)
   Me.Top = Application.ActiveWindow().Top + Application.ActiveWindow().Height / 2 - (Me.Height / 2)
End Sub