使用参数打开 WPF 窗体 Outlook Vsto

Open WPF form Outlook Vsto with parameter

我有一个 Outlook vsto,它将 Button 添加到所选邮件的预览窗格。 目前 vsto 仅用于添加按钮,但其他功能即将到来。

另外,我有一个 WPF Window,它会在单击 Button 时打开。

 private void ArchiveButton_Click(object sender, EventArgs e)
 {
     var mail = (Outlook.MailItem)OutlookItem; // currently selected mail.
     var app = new App();
     app.InitializeComponent();
     app.Run(new MainWindow(mail));
 }

如您所见,我可以 运行 App.xaml 获取样式并将参数 mail 传递给 window。 在此 MainWindow 中,我编辑了一些元数据并启动了存储过程,因此我需要那个 Outlook.MailItem 对象。

我找到的解决方案是有两个 MainWindow 的构造函数。一个由 app.InitializeComponent() 调用,似乎加载样式并立即关闭,另一个由 app.Run(new MainWindow(mail)) 调用,我实际使用。

 public MainWindow()
 {
     Close();
 }

 public MainWindow(Outlook.MailItem mail)
 {
     InitializeComponent();
     SearchTextBox.Text = mail == null ? "null" : "mail"; // checking if the WPF got the object
     MailItem = mail;
     ...
 }

我的问题是:

是否有更清晰/更好的解决方案来同时获得样式和参数?

当您从代码中手动创建 WPF main window 时,请从 App.xaml 文件中删除 StartupUri 定义。

如果已定义,它将由 WPF 基础结构自动创建,因此 window 闪烁。