2011-01-21 82 views
0

我已經使用WPF爲Outlook創建了一個加載項。除了「Flare」之外,一切工作都正常。當WPF窗口打開時,它不在Outlook窗體上居中,它在屏幕上居中打開。我將WindowStartLocation設置爲CenterOwner,但這似乎沒有辦法。中心展望WPF加載項

回答

0

您應該能夠獲得對當前Outlook實例的引用,訪問該實例的Application對象並獲取窗口大小和位置(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窗口是第一個監視器上最大化。一些更多的邏輯將被寫入採取其他意外的保健

+0

謝謝,關閉,我不得不按摩一下,但你給了我所需要的東西。希望現在回到web dev。 :-)至少在我的機器上,我不必在雙顯示器上煩躁不安。我的最終解決方案如下。 –

2

我的解決方案,以指導從科裏:

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; 
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