使用参数打开 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 闪烁。
我有一个 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 闪烁。