【问题标题】:Center Outlook WPF Add-In居中 Outlook WPF 加载项
【发布时间】:2014-01-31 02:48:20
【问题描述】:

我已经使用 WPF 为 Outlook 创建了一个加载项。一切正常,除了“耀斑”。当 WPF 窗口打开时,它不是以 Outlook 窗体为中心,而是以屏幕为中心打开。我将 WindowStartLocation 设置为 CenterOwner,但这似乎不起作用。

【问题讨论】:

    标签: wpf outlook vsto


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      类似于:

      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 窗口位于第一台显示器上并已最大化。必须编写更多逻辑来处理其他突发事件

      【讨论】:

      • 谢谢,关闭,我不得不按摩一下,但你给了我我需要的东西。希望现在回到我的网络开发。 :-) 我不必在双显示器上烦躁,至少在我的机器上是这样。我的最终解决方案如下。
      【解决方案3】:

      遇到这个寻找 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-12
        • 2012-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多