【问题标题】:Centering WPF dialog spawned from VSTO Outlook Add-In从 VSTO Outlook 加载项生成的居中 WPF 对话框
【发布时间】:2012-03-12 07:49:01
【问题描述】:

我正在开发一个为用户输入提供对话框的 Outlook 2010 加载项。在功能区中显示按钮所需的代码位于其自己的 Outlook 2010 加载项项目中。该项目引用了负责大部分工作的 WPF 用户控件库。

我在 WPF 用户控件库项目中使用了一个静态方法,该方法负责正确配置 Caliburn.Micro 并显示对话框。除了我无法弄清楚如何正确定位对话框之外,所有这些都按预期工作。我希望它显示在 Outlook 窗口的中心。我知道我可以访问Microsoft.Office.Interop.Outlook.Application.ActiveWindow(),但我看不出这对我有什么帮助,因为我无法按照 Caliburn.Micro WindowManager 的 ShowDialog 方法设置中的预期将其转换为 PlacementTarget

WPF 用户控件库

namespace WpfUserControlLibrary {
    public static class Connector {
        public static void ShowDialog() {
            new AppBootstrapper();
            var windowManager = IoC.Get<IWindowManager>();
            windowManager.ShowDialog( new ShellViewModel() );
        }
    }
}

Outlook 2010 插件

WpfUserControlLibrary.Connector.ShowDialog();

【问题讨论】:

    标签: wpf vsto outlook-addin caliburn.micro


    【解决方案1】:

    我能够找到解决方案。感谢this question 的帮助,我能够将适当的父窗口位置和大小参数传递给连接器。我检查了 Caliburn.Micro 源代码,发现我实际上是在创建一个 ChildWindow——而不是 Popup。因此,我只需要设置对话框设置的TopLeft 值。

    WPF 用户控件库

    namespace WpfUserControlLibrary {
        public static class Connector {
            public static void ShowDialog(System.Windows.Rect parent) {
                new AppBootstrapper();
                var windowManager = IoC.Get<IWindowManager>();
    
                // Popup is always 600 x 400
                dynamic settings = new System.Dynamic.ExpandoObject();
                settings.Left = (parent.Left + parent.Width / 2) - 300;
                settings.Top = (parent.Top + parent.Height / 2) - 200;
    
                windowManager.ShowDialog(new ShellViewModel(), settings: settings);
            }
        }
    }
    

    Outlook 2010 插件

    var win = ThisAddIn.Application.ActiveWindow();
    var parent = new System.Windows.Rect(win.Left, win.Top, win.Width, win.Height);
    WpfUserControlLibrary.Connector.ShowDialog(parent);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2014-05-10
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多